精华内容
下载资源
问答
  • VBA学习笔记本(二)——两个表格数据匹配_DEMO 将excel中两个工作中,数据进行一键同步的通用方法
  • 数据匹配VBA

    2020-06-16 18:56:33
    1. 什么是VBA? Visual Basic for Applications(简称VBA)是新一代标准宏语言,是基于Visual Basic for Windows 发展而来的。它与传统的宏语言不同,传统的宏语言不具有高级语言的特征,没有面向对象的程序设计概念...

    1. 什么是VBA?

    Visual Basic for Applications(简称VBA)是新一代标准宏语言,是基于Visual Basic for Windows 发展而来的。它与传统的宏语言不同,传统的宏语言不具有高级语言的特征,没有面向对象的程序设计概念和方法。而VBA 提供了面向对象的程序设计方法,提供了相当完整的程序设计语言。VBA 易于学习掌握,可以使用宏记录器记录用户的各种操作并将其转换为VBA 程序代码。这样用户可以容易地将日常工作转换为VBA 程序代码,使工作自动化。

    VBA百度百科

    2.应用场景

    当一个重复的工作每天或者更高频率使用时,完全可以用一个程序实现自动化。
    比如:我需要每天匹配不同地区不同工作的管理人员,数据量每天在10万+,每天谢公式匹配太耽误时间,所以考虑用VBA实现。
    在这里插入图片描述
    我的结果就是直接点击下识别那个按钮,就等待1分钟左右就可以在C列匹配对应的结果

    3.代码

    Public Sub 地区业态匹配()
    
        Dim yrr
    
        pt = "D:\日报制作\明细数据\0匹配主键\"
    
        fn = Dir(pt, 0)
    
        Do While Len(fn) > 0
    
            Debug.Print pt & fn
    
            '打开工作簿
            Workbooks.Open Filename:=pt & fn, UpdateLinks:=False
    
            If Left(fn, 4) = "业态地区" Then
    
                Workbooks(fn).Sheets("业态地区主键").Cells.AutoFilter
    
    '            Workbooks(fn).Sheets("业态地区主键").Rows(1).Delete
    
                yrr = Sheets("业态地区主键").Range("A2:C" & Sheets("业态地区主键").Range("A650000").End(3).Row)
    
            End If
    
            '关闭工作簿,不保存更改
            Workbooks(fn).Close savechanges:=False
    
            fn = Dir()
    
        Loop
    
    '    yrr = Sheets("业态地区主键").Range("A2:C" & Sheets("业态地区主键").Range("A650000").End(3).Row)
    
    
        Sheets(1).Select
    
        lsr = Range("A650000").End(3).Row
    
    '===用【业态地区】主键匹配【人员】========================================================================
    
        For i = 2 To lsr
    
            For y = LBound(yrr) To UBound(yrr)
    
                yt_dq_y = yrr(y, 1) & yrr(y, 2)
    
                yt_dq_mx = Cells(i, 1) & Cells(i, 2)
    
                If yt_dq_y = yt_dq_mx Then
    
                    Cells(i, 3) = yrr(y, 3)
    
                End If
    
            Next
    
        Next
    
        MsgBox "DONE"
    
    End Sub
    

    4.说明

    1.VBA 可以实现的匹配不止可以精准,也可以匹配包含的内容.
    2.这种匹配方式必须先建立一个标准的对应文件,然后才根据代码打开这个文件去完成匹配的操作.

    希望大家交流指点!感谢!!!

    展开全文
  • 最近遇到很多要在两个之间同步数据的情况,比如在sheet1 为基础 中有非常多的字段 姓名 学号 班级 专业 性别 年龄 籍贯 张A 001 一班 计算机 男 15 北京 王B 002 一班 物理 男 30 上海 张C 003 一...

    最近遇到很多要在两个表之间同步数据的情况,比如在sheet1 为基础表 表中有非常多的字段

    姓名学号班级专业性别年龄籍贯
    张A001一班计算机15北京
    王B002一班物理30上海
    张C003一班采矿18北京
    李E004一班软件20北京
    秦F005一班财会26北京

    而在Sheet2中却只有如下数据

    姓名学号班级专业性别年龄籍贯
    张A001
    张C003
    李E004
    秦F005

    Sheet2中的信息不全,需要补充完整,所以就需要VBA进行快速匹配,但是如果为了通用性,不仅仅局限于这个两张表中,就增加了一些功能。首先建立一个窗体增加如下控件:
    在这里插入图片描述
    三个下拉框分别为选取需要匹配的工作表,也就是本立中的Sheet2,另一个作为基准表,也就是本利中的Sheet1,二基准字段为两个表中匹配时作为关联的一个字段,本利中未学号,需要为唯一值。

    新建一个模块,用于存放基础方法,共需建立一个窗口一个模块
    在这里插入图片描述

    基础功能模块中算法如下:

    Function 获取表头数组(表名)
         '''本方法作用是输入表名,返回对应表中首行表头组成的数组
         '''使用了字典的作用是为了去重
         '关闭页面刷新
        Application.ScreenUpdating = False
        Sheets(表名).Select
        With Sheets(表名)
            表行数 = Sheets(表名).UsedRange.Rows.Count
            表列数 = Sheets(表名).UsedRange.Columns.Count
            表头数组 = Sheets(表名).Range(Cells(1, 1), Cells(1, 表列数)).Value
            Dim 表头字典 As Object '声明字典对象,亦可通过声明变体型变量完成声明 >>> Dim d
            Set 表头字典 = CreateObject("Scripting.Dictionary")    '声明字典
            For i = 1 To 表列数
                表头字典(Sheets(表名).Cells(1, i) & "") = i
            Next i
            Dim 表数组()
            表数组 = Sheets(表名).Range(Cells(1, 1), Cells(表行数, 表列数)).Value
            表数组行数 = UBound(表数组) - LBound(表数组) + 1
        End With
        '通过字典转化后可以实现去除的目的
        表头数组 = 表头字典.Keys
        Application.ScreenUpdating = True
        获取表头数组 = 表头数组
    End Function
    
    Function 同步表内容(需同步表, 基准表, 基准字段)
    	'''本方法作用为同步两个表的数据,需输入需同步表,基准表,基准字段三个参数
        '关闭页面刷新
        Application.ScreenUpdating = False
        '加上选中工作表,可以减少一些不必要的错误,比如在数组赋值的时候如果不是选中工作表中就会报错
        Sheets(需同步表).Select
        '用with可以减少引用,方便书写,也可以小幅度的提高速度
        With Sheets(需同步表)
            '获取表中有数据的行数和列数
            需同步表行数 = .UsedRange.Rows.Count
            需同步表列数 = .UsedRange.Columns.Count
            '将需同步表的表头放入数组
            需同步表头数组 = .Range(Cells(1, 1), Cells(1, 需同步表列数)).Value
            '将表头内容存入字典
            Dim 需同步表头字典 As Object '声明字典对象,亦可通过声明变体型变量完成声明 >>> Dim d
            Set 需同步表头字典 = CreateObject("Scripting.Dictionary")    '声明字典
            For i = 1 To 需同步表列数
                需同步表头字典(Sheets(需同步表).Cells(1, i) & "") = i
            Next i
            '将需同步表内数据放入数组
            Dim 需同步表数组()
            需同步表数组 = .Range(Cells(1, 1), Cells(需同步表行数, 需同步表列数)).Value
            需同步表数组行数 = UBound(需同步表数组) - LBound(需同步表数组) + 1
        End With
        
        Sheets(基准表).Select
        With Sheets(基准表)
            基准表行数 = Sheets(基准表).UsedRange.Rows.Count
            基准表列数 = Sheets(基准表).UsedRange.Columns.Count
            基准表头数组 = Sheets(基准表).Range(Cells(1, 1), Cells(1, 基准表列数)).Value
            Dim 基准表头字典 As Object '声明字典对象,亦可通过声明变体型变量完成声明 >>> Dim d
            Set 基准表头字典 = CreateObject("Scripting.Dictionary")    '声明字典
            For i = 1 To 基准表列数
                基准表头字典(Sheets(基准表).Cells(1, i) & "") = i
            Next i
            Dim 基准表数组()
            基准表数组 = Sheets(基准表).Range(Cells(1, 1), Cells(基准表行数, 基准表列数)).Value
            基准表数组行数 = UBound(基准表数组) - LBound(基准表数组) + 1
        End With
        
        '将需同步表头的内容字典的所有key,放入数组中
        需同步表头字典keys = 需同步表头字典.Keys
        '通过循环来判断是否相等及赋值
        For i = 2 To 需同步表数组行数
            For j = 2 To 基准表数组行数
                If 需同步表数组(i, 需同步表头字典(基准字段)) = 基准表数组(j, 基准表头字典(基准字段)) Then
                    '通过循环,为每一行的每个单元格进行赋值
                    For m = 0 To UBound(需同步表头字典keys) - 1
                        If 基准表头字典.exists(需同步表头字典keys(m)) Then 'exists是用来判断字典中是否存在某个kye,用此方法比循环效率更高
                            Sheets(需同步表).Cells(i, 需同步表头字典(需同步表头字典keys(m))) = 基准表数组(j, 基准表头字典(需同步表头字典keys(m)))
                        End If
                    Next m
                End If
            Next j
        Next i
        
        Sheets(需同步表).Select
        '打开屏幕刷新输出结果
        Application.ScreenUpdating = True
        '返回函数值
        同步表内容 = "数据同步处理完成!"
        
    End Function
    

    读取表名按钮方法:

    Private Sub 读取表名按钮_Click()
        '''读取当前工作簿中所有的工作表,并且赋值给对应的下拉框控件
        '重置下拉框内容
        ComboBox_需匹配表.Clear
        ComboBox_基准表.Clear
        '通过循环,获取工作表序号,然后将其名字放入下拉框控件中
        For i = 1 To Sheets.Count
            '在下拉框控件中加入内容
            ComboBox_需匹配表.AddItem (Sheets(i).Name)
            ComboBox_基准表.AddItem (Sheets(i).Name)
        Next i
    End Sub
    

    在需求匹配表内容选择后,基准字段下拉框中添加对应表头信息

    '下拉框变化事件,当某下拉框内容变化后触发此事件
    Private Sub ComboBox_需匹配表_change()
        
        表头数组 = 基础功能模块.获取表头数组(ComboBox_需匹配表.Text)
        'Debug.Print (ComboBox_需匹配表.Text & "_" & 表头数组(0))
        表头数组长度 = UBound(表头数组) - LBound(表头数组)
        For i = 0 To 表头数组长度
            '在下拉框控件中加入内容
            ComboBox_基准字段.AddItem (表头数组(i))
        Next i
    End Sub
    

    匹配内容按钮主要功能是调用函数进行计算

    Private Sub 匹配内容按钮_Click()
        需同步表名 = ComboBox_需匹配表.Text
        基准表名 = ComboBox_基准表.Text
        基准字段 = ComboBox_基准字段.Text
        返回信息 = 基础功能模块.同步表内容(需同步表名, 基准表名, 基准字段)
        MsgBox (返回信息)
    End Sub
    

    综上以上即可实现通用的数据匹配,但是前提是两个工作表的表头字段是一样的,表头顺序无所谓,但是名称一定一样。

    示例文件:https://download.csdn.net/download/huaqitaishao/12325721

    展开全文
  • VBA多工作簿、工作 多条件匹配-高级筛选
  • VBA 数据透视的创建

    千次阅读 2021-01-21 15:21:37
    方法 读/写 值类别 默认值 说明 .ColumnGrand ...数据透视在刷新或移动域时自动设置格式 ...如果数据透视在有错误的单元格中显示用户自定义的错误字符串,则该值为 True。 .ErrorString 返回...

    创建一个数据透视表(PivotTable)

    创建方法一

    通常会先创建一个数据缓存(PivotCache),然后再创建透视表(PivotTable

    创建透视缓存的语法如下

    Workbook.PivotCaches.Create(SourceType, [SourceData], [Version])
    

    创建透视表的语法如下

    PivotCache.CreatePivotTable(TableDestination, TableName, ReadData, DefaultVersion)
    

    PivotCaches.Create 中的参数说明

    参数名称必需/可选数据类型说明
    SourceType必需XlPivotTableSourceType数据的来源。_SourceType_可以是下列XlPivotTableSourceType常量之一:
    xlConsolidationxlDatabasexlExternal
    SourceData可选Variant数据透视表缓存的数据地址,以文本表示。
    SourceType 不为 xlExternal 时,是必须参数。
    Version可选Variant数据透视表的版本。 _Version_可以是 XlPivotTableVersionList 常量之一。

    PivotCache.CreatePivotTable 中的参数说明

    名称必需/可选数据类型说明
    TableDestination必需Variant数据透视表目标区域 (工作表上将放置生成的数据透视表的区域) 左上角的单元格。 目标区域必须位于工作簿(此工作簿包含由 expression 指定的 PivotCache 对象)的某个工作表中。
    TableName可选Variant新的数据透视表的名称。
    ReadData可选Variant如果为 True, 则创建包含外部数据库中的所有记录的数据透视表缓存;此缓存可能非常大。 如果为 False,则允许在实际读取数据之前将某些字段设置为基于服务器的页字段。
    DefaultVersion可选Variant数据透视表的默认版本。

    XlPivotTableSourceType 的值与说明

    名称说明
    xlConsolidation3多重合并计算数据区域。
    xlDatabase1Microsoft Excel 列表或数据库。
    xlExternal2其他应用程序中的数据。
    xlPivotTable-4148与另一数据透视表相同来源。
    xlScenario4数据基于使用方案管理器创建的方案。

    XlPivotTableVersionList 的值与说明

    名称说明
    xlPivotTableVersion20000Excel 2000
    xlPivotTableVersion101Excel 2002
    xlPivotTableVersion112Excel 2003
    xlPivotTableVersion123Excel 2007
    xlPivotTableVersion144Excel 2010
    xlPivotTableVersion155Excel 2013
    xlPivotTableVersionCurrent-1仅为向后兼容性而提供

    创建方法二

    PivotTables.Add (PivotCache, TableDestination, TableName, ReadData, DefaultVersion)
    
    名称必需/可选数据类型说明
    PivotCache必需PivotCache表示一个数据透视表缓存,而新的数据透视表将基于此缓存。 缓存用于为报表提供数据。
    TableDestination必需Variant数据透视表目标区域(工作表中用于放置所生成的报表的区域)左上角的单元格。 必须在工作表中(此工作表包含由 expression 指定的 PivotTables 对象)指定一个目标区域。
    TableName可选Variant新的数据透视表的名称。
    ReadData可选Variant如果为 True,则创建数据透视表缓存以包含外部数据库中的所有记录;此时缓存可能会很大。
    如果为 False,则允许在实际读取数据之前将某些字段设置为基于服务器的页字段。
    DefaultVersion可选Variant最初在其中创建数据透视表的 Microsoft Excel 的版本。

    透视表样式设置中的部分重要属性

    PivotTable 对象的属性

    属性读/写值类别默认值说明
    .Name读/写String透视表名称
    .ColumnGrand读/写BooleanTrue是否启用列汇总
    .RowGrand读/写BooleanTrue是否启用行汇总
    .HasAutoFormat读/写BooleanTrue数据透视表在刷新或移动域时自动设置格式
    .DisplayErrorString读/写BooleanFalse有错误的单元格是否显示用户自定义的错误字符串
    .ErrorString读/写StringDisplayErrorString 属性为 True 时,如果单元格中有错误而显示的字符串
    .DisplayNullString读/写BooleanTrue包含空值的单元格中是否显示用户自定义的字符串
    .NullString读/写String空字符串 ("")DisplayNullString 属性为 True 时, 在包含 null 值的单元格中显示的字符串
    .EnableDrilldown读/写BooleanTrue是否启用“显示明细数据
    .MergeLabels读/写BooleanFalse数据透视表的外部行项、列项、分类汇总和总计标志使用合并单元格
    .PageFieldOrder读/写LongxlDownThenOver将页字段添加到数据透视表的布局中的顺序
    可以是下列的XlOrder 常量之一: xlDownThenOver或xlOverThenDown
    .PageFieldWrapCount读/写Long0数据透视表中每行或每列的页字段数目
    .PreserveFormattingBooleanTrue透视、排序或更改页字段项等操作刷新或重新计算报表时保留透视表格式
    .SaveData读/写BooleanTrue是否保留数据透视表缓存(即 PivotCache
    如果数据透视表的数据随工作簿一起保存,则为 True。 如果仅保存数据透视表的定义,则为 False。
    .PrintTitles读/写BooleanFalse如果基于数据透视表设置工作表的打印标题,则该属性值为 True。
    如果使用工作表的打印标题,则该属性值为 False。
    .RepeatItemsOnEachPrintedPage读/写BooleanTrue当打印指定的数据透视表时,如果每页第一行上都显示行、列和项标志,则该值为 True。 如果仅在第一页上打印这些标志,则该值为 False。
    .TotalsAnnotation读/写BooleanFalse是否在指定的数据透视表中的每个分类汇总和总计值的旁边显示() (如果报表基于 OLAP 数据源)。
    .CompactRowIndent读/写1当启用压缩行布局表单时,返回或设置透视项目的缩进增量。 读/写。默认值为 1。 此设置的有效值为0到 Microsoft Excel 中指定的最大缩进量。
    .InGridDropZones读/写BooleanFalse此属性用于为 PivotTable 对象切换网格中的拖放区域。 在一些情况下,它还会影响数据透视表的布局。 当 InGridDropZones 属性设置为 True 时,存在网格中的拖放区域。 当此属性设置为 False 时,不存在网格中的拖放区域。数据透视表的布局也会随此属性一起改变。
    .DisplayFieldCaptions读/写BooleanTrue控制是否在网格中显示行和列的筛选按钮和透视字段标题。
    .DisplayMemberPropertyTooltips读/写BooleanFalse控制是否在工具提示中显示成员属性。
    .DisplayContextTooltips读/写BooleanTrue控制是否为数据透视表单元格显示工具提示。
    .ShowDrillIndicators读/写BooleanTrue用于切换数据透视表中深化指示符的显示。
    .PrintDrillIndicators读/写BooleanFalse指定是否使用数据透视表打印钻取标识符。
    .AllowMultipleFilters读/写BooleanFalse如果此属性设置为 True,可将多个筛选应用于一个透视字段
    如果此属性设置为 False,在对已应用了筛选的透视字段应用筛选时,将删除现有筛选,然后应用新筛选。 如果数据透视表中有多个筛选已应用的字段, 则将此属性设置为False将无提示删除数据透视表中的所有筛选器, 而不显示任何警告。 但是通过用户界面删除筛选时,将显示警告。
    .SortUsingCustomLists读/写BooleanTrue控制是否使用 自定义列表对字段的项进行排序, 包括在 初始化数据透视域和数据透视项时,以及之后当用户应用排序时也是如此。
    将此属性设置为 False 可优化包含许多项目的字段的性能, 并且它还允许不需要基于自定义列表的排序功能.
    .FieldListSortAscending读/写BooleanFalse控制数据透视表字段列表中字段的排序顺序。 当此属性设置为 True 时,字段按升序顺序排序。 当它设置为 False 时,字段按数据源顺序排序。
    .ShowValuesRow读/写BooleanFalse是否显示值行。
    .CalculatedMembersInFilters读/写BooleanFalse是否在筛选器中对 OLAP 服务器的计算成员进行求值。
    .RowAxisLayout此方法用于同时为所有现有的透视字段设置版式选项。指定版式行的类型。 xlCompactRow 0 压缩行;xlOutlineRow 2 大纲行;xlTabularRow 1 表格行

    .PageFieldOrder 属性的可选值及其说明

    名称说明
    xlDownThenOver1向下处理行,然后向右逐个处理页或页面字段。
    xlOverThenDown2向右逐个处理页或页面字段,然后向下处理行。

    .RowAxisLayout (报表的显示布局) 属性的可选值及其说明

    名称说明
    xlCompactRow0压缩形式显示
    xlTabularRow1表格形式显示
    xlOutlineRow2大纲形式显示

    添加透视字段(PivotField)及相应设置

    PivotField 对象是 PivotFields 集合的成员
    向透视表中添加字段时,直接如下方式引用字段名称即可

    WorkSheet.PivotTables("透视表").PivotFields("字段")
    

    以下为整理自 Microsoft 帮助文件 中的 PivotField 常用的一些 “读/写” 属性及其说明

    方法读/写值类别默认值说明
    .Orientation读/写XlPivotFieldOrientation返回或设置一个**.XlPivotFieldOrientation** 值, 它代表指定数据透视表中的字段的位置。
    .Position读/写Variant"返回或设置一个Variant值, 它代表其方向 (行、列、页、数据) 中的所有字段中的字段位置 (第一个、第二个、第三个, 等等)。
    .Function读/写XlConsolidationFunction返回或设置对数据透视表字段汇总时所使用的函数(仅用于数据字段)。
    .LayoutForm读/写XlLayoutFormType返回或设置指定的数据透视表项出现的方式,即以表格格式还是以分级显示格式显示。
    .Calculation读/写XlPivotFieldCalculation返回或设置一个**.XlPivotFieldCalculation** 值, 该值代表指定的字段执行的计算类型。 此属性仅对数据字段有效。
    .Value读/写String返回或设置一个 String 值,它代表数据透视表中指定的字段的名称。
    .VisibleItemsList读/写Variant返回或设置一个 Variant 类型的值,该值指定一个字符串数组,字符串代表应用于透视字段的手动筛选中的包含项。
    .DatabaseSort读/写Boolean如果为 True,则允许手动更改数据透视表字段中项目的位置。 如果字段没有手动定位的项,则返回 True 。
    .DataTypeXlPivotFieldDataType返回一个XlPivotFieldDataType 值, 它代表数据透视表字段中的数据类型。
    .DragToColumn读/写BooleanTrue如果指定字段能被拖动到列位置上,则为 True。
    .DragToData读/写BooleanTrue如果指定字段可被拖动到数据位置上,则为 True。
    .DragToHide读/写BooleanTrue如果通过将字段拖离数据透视表可隐藏该字段,则为 True。
    .DragToPage读/写BooleanTrue如果字段可被拖动到页位置上,则为 True。
    .DragToRow读/写BooleanTrue如果字段可被拖动到行位置上,则为 True。
    .DrilledDown读/写BooleanTrue如果指定数据透视表字段或数据透视表项的标志设置为“drilled”(展开或可见),则为 True。
    .EnableItemSelection读/写BooleanTrue如果为 False,则在用户界面中禁止使用下拉字段的功能。
    .LayoutPageBreak读/写BooleanFalse如果每个字段后都插入了分页符,则该值为 True。
    .ShowDetail读/写Boolean获取或设置指定的透视字段对象是否显示详细信息
    .LayoutCompactRow读/写Boolean指定在选择行时是否压缩透视字段(在一列中显示多个透视字段的项目)
    .LayoutSubtotalLocation读/写XlSubtotalLocationType返回或设置与指定字段相关(在其上面或下面)的数据透视表字段分类汇总的位置。
    .Name读/写String返回或设置一个 String 值,它代表对象的名称。
    .NumberFormat读/写String返回或设置一个 String 值,它代表对象的格式代码。
    .PropertyOrder读/写只对属于成员属性字段的数据透视表字段有效。 返回一个 Long 类型的数值,该数值表示成员属性在其所属的多维数据集字段内的显示位置
    .Subtotals读/写Variant返回或设置与指定字段同时显示的分类汇总。 仅对非数据字段有效。
    .RepeatLabels读/写返回或设置在数据透视表中是否对指定的透视字段重复项目标签。
    .SubtotalName读/写String。返回或设置显示在指定数据透视表的分类汇总列或行标题中的文本字符串标志。
    .UseMemberPropertyAsCaption读/写Boolean此属性用于控制是否将成员属性标题用于透视字段的 PivotItem 标题
    .XlPivotFieldDataType读/写BooleanTrue此属性用于指定是否在工具提示中显示透视字段的特定成员属性
    .DisplayInReport读/写BooleanTrue此属性用于指定是否在数据透视表中显示指定的成员属性透视字段
    .HiddenItemsList读/写Variant返回或设置一个Variant类型的值, 该值指定作为数据透视表字段的隐藏项的字符串数组
    .BaseField读/写Variant返回或设置自定义计算的基准字段。 本属性仅对数据字段有效 此属性对于 OLAP 数据源无效
    .BaseItem读/写Variant返回或设置用于自定义计算的基本字段中的项。 仅对数据字段有效。 此属性对于 OLAP 数据源无效。
    .Caption返回一个 String 值,它代表数据透视字段的标签文本。
    .CurrentPage读/写PivotItem返回或设置页字段的当前页显示(仅对页字段有效)。
    .EnableMultiplePageItems读/写Boolean用于指定是否在页面区域中的字段的筛选器下拉列表中显示复选框。
    .CurrentPageList读/写Variant返回或设置对应于项目列表的字符串数组,该项目列表包含于数据透视表的多项目页字段中。若要避免运行时错误, 数据源必须是 OLAP 源, 选择的字段当前必须位于页面位置中, 并且EnableMultiplePageItems 属性必须设置为True。
    .CurrentPageName读/写String返回或设置指定数据透视表上的当前显示页。 该页名称将出现在页字段中。 注意,只有当已存在当前显示页时,本属性才有效。本属性应用于与 OLAP 数据源相连的数据透视表。 如果用未与 OLAP 数据源相连的数据透视表返回或设置本属性,则将导致运行时错误。
    .Formula读/写String返回或设置一个 String 值,它代表 A1 样式表示法和宏语言中的对象的公式
    .Hidden读/写Boolean此属性用于隐藏 OLAP 层次结构的各个级别。
    .IncludeNewItemsInFilter读/写Boolean在将手动筛选应用于透视字段时,此属性允许开发人员指定是应跟踪排除的项目还是应跟踪包含的项目。
    .LayoutBlankLine读/写BooleanFalse___如果在数据透视表的指定行字段后插入了一个空行,则该值为 True。
    .MemberPropertyCaption读/写Boolean设置MemberPropertyCaption属性可控制将哪个成员属性用作给定级别的标题。
    .ServerBased读/写Boolean如果指定数据透视表的数据源为外部数据源,并且只检索与选定页字段相匹配的数据项,则该属性值为 True。
    .ShowAllItems读/写BooleanFalse如果显示数据透视表中的所有项, 即使它们不包含摘要数据也是如此。
    .StandardFormula读/写返回或设置一个 String 值,该值指定使用标准英语(美国)格式的公式,主要影响具有日期或数字格式的项目名称。

    .Orientation 属性中 XlPivotFieldOrientation 参数其值及说明如下

    名称说明
    xlHidden0Hidden,隐藏
    xlRowField1Row,行
    xlColumnField2Column,列
    xlPageField3Page,筛选
    xlDataField4Data,数据
    展开全文
  • VBA是Office软件所支持的,可以自动处理重复,复杂的流程的...该脚本涉及使用VBA打开另一个excel,并获取数据;使用模糊查询算法获取数据;流程控制语句If、While、Set、With等语句。对于学习和相关用途十分有帮助哦。。
  • 现希望在数据查询的关键字栏中输入某个关键字,并在“数据表”中的各列对该关键字进行查找,然后希望能随着按钮“查找下一个”的单击不断显示下一条满足条件的记录。如何用VBA完成? 客户名称 单位地址 ...

    目录

    示例

    实现代码

    跨表操作单元格

    连续查找功能


    示例

        如图所示,该工作簿中建立“数据表”和“数据查询”表分别用于存储客户信息以及客户信息的查询。现希望在数据查询表的关键字栏中输入某个关键字,并在“数据表”中的各列对该关键字进行查找,然后希望能随着按钮“查找下一个”的单击不断显示下一条满足条件的记录。如何用VBA完成?

    客户名称单位地址联系人联系电话
    石家庄伊克塞尔有限公司石家庄市中山路52号程建华XXX-XXXXXXXX
    太原伊克塞尔有限公司太原市中山路76号李国敏XXX-XXXXXXXX
    沈阳伊克塞尔有限公司沈阳市中山路27号袁志刚XXX-XXXXXXXX
    长春伊克塞尔有限公司长春市中山路56号周汉林XXX-XXXXXXXX
    哈尔滨伊克塞尔有限公司哈尔滨市中山路6号骈永富XXX-XXXXXXXX
    济南伊克塞尔有限公司济南市中山路56号孙玉梅XXX-XXXXXXXX
    南京伊克塞尔有限公司南京市中山路33号陈亚菁XXX-XXXXXXXX
    杭州伊克塞尔有限公司杭州市中山路48号康小芸XXX-XXXXXXXX
    合肥伊克塞尔有限公司合肥市中山路81号刘晨XXX-XXXXXXXX
    福州伊克塞尔有限公司福州市中山路69号齐光XXX-XXXXXXXX
    台北伊克塞尔有限公司台北市中山路30号于健惠XXX-XXXXXXXX
    南昌伊克塞尔有限公司南昌市中山路83号王文群XXX-XXXXXXXX
    郑州伊克塞尔有限公司郑州市中山路80号曾国安XXX-XXXXXXXX
    武汉伊克塞尔有限公司武汉市中山路20号刘志峰XXX-XXXXXXXX
    长沙伊克塞尔有限公司长沙市中山路78号刘玉录XXX-XXXXXXXX
    广州伊克塞尔有限公司广州市中山路30号俞卫广XXX-XXXXXXXX
    海口伊克塞尔有限公司海口市中山路98号杨建军XXX-XXXXXXXX
    成都伊克塞尔有限公司成都市中山路39号曲波XXX-XXXXXXXX
    贵阳伊克塞尔有限公司贵阳市中山路59号林革壮XXX-XXXXXXXX
    昆明伊克塞尔有限公司昆明市中山路41号李卫卿XXX-XXXXXXXX
    西安伊克塞尔有限公司西安市中山路60号申玲XXX-XXXXXXXX
    兰州伊克塞尔有限公司兰州市中山路67号孙正发XXX-XXXXXXXX
    西宁伊克塞尔有限公司西宁市中山路22号毛传阳XXX-XXXXXXXX
    上海伊克塞尔有限公司上海市中山路100号张元端XXX-XXXXXXXX

    实现代码

    Option Explicit
    
    Dim rngFind As Range            '存放查找的起始单元格
    Sub 跨表查询()
        Dim sKey As String          '关键字
        Dim shtQuery As Worksheet   '查询表
        Dim shtData As Worksheet    '数据表
        Dim i As Long               '行/列序号
        '获取工作表变量
        Set shtQuery = Sheets("数据查询")
        Set shtData = Sheets("数据表")
        '查询关键字
        sKey = shtQuery.Cells(5, "B")
        With shtData
            '若查询起始单元格未定义,则将A1单元格作为起始
            If rngFind Is Nothing Then
                Set rngFind = .Range("A1")
            End If
            
            '查找单元格
            Set rngFind = .Cells.Find(sKey, rngFind, lookat:=xlPart)
            
            '若未找到
            If rngFind Is Nothing Then
                For i = 9 To 12
                    shtQuery.Cells(i, "B").Value = ""
                Next
            '找到后
            Else
                '填写查询表
                For i = 9 To 12
                    shtQuery.Cells(i, "B") = .Cells(rngFind.Row, i - 8)
                Next
            '将下一次查找的起始单元格设置为当前数据行的最后一个单元格
            Set rngFind = Intersect(rngFind.EntireRow, .Columns("D:D"))
            End If
            
        End With
    End Sub
    

    跨表操作单元格

        以工作表对象作为单元格对象的父对象,并在表达式中加以描述,可以得到不同工作表中单元格的值。在当前工作簿中,单元格完整的表述应为

    Worksheet.Range

        其中,Worksheet为当前工作簿中某个工作表对象,Range为Worksheet工作表中的某个单元格或者单元格区域。对于所有应用于单元格的方法或者属性,当需要跨表执行某个单元格的方法或者获取属性时,则必须以上述形式为单元格指明其所在的工作表。否则,Excel将会视为当前工作表中的单元格。
        本例中,将使用Find方法对指定的关键字进行查找。由于当前操作的工作表为“数据查询”表,而所需查找的内容属于“数据表”,因而必须使用单元格的完整形式表示“数据表”中的数据单元格区域:

    Worksheets("数据表").Range("A2:D25")

    同样,当需要从“数据表”中读取数据时,也必须以单元格的完整表述表示单元格。

    连续查找功能

        Excel内置的查找功能提供了用户单击按钮时不断查找下一个的作用。在VBA程序中使用Find方法指定After参数,即可从某个单元格之后的范围进行查找。因而必须记录当前找到的单元格对象,一般可以存放于一个全局变量中,或者可以存放于工作表中。
        本例是按照每条记录进行查找,即同一条记录中含有相同的关键字的多个字段不应被查找到多次。因而作为记录查找到的单元格,应该将其设置为与查找到的单元格相同行的最后一列单元格。如此,当再次执行Find方法并设置After参数为该单元格时,则可以从下一条记录进行查找。
        当查找不到时,则Find方法返回Nothing。此时,应将记录单元格的全局变量设置为第一个单元格。否则,当执行Find方法进行查找时会发生错误。本例的连续查找流程见图4-7。

     

     

    展开全文
  • 1 本地取其他EXCEL的表名,很简单 1.1 下面2种写法都是可以的 Sub williamDing1() k = 1 For i = 1 To Worksheets.Count Worksheets("统计").Cells(k, 1) = Worksheets(i).Name k = k + 1 Next End Sub Sub ...
  • VBA实现关键词匹配

    2021-06-10 16:09:02
    匹配sheet页:在A/B列粘贴需要打标的源数据,然后在词库页面配置好关键词,最后在H列选择匹配模式,即可在C列得到达标结果 词库sheet页:按识别逻辑,在B/(F&G)/(K&L)列设置需识别的关键词,然后在C/H/M列...
  • 这次要做的就是,如果这个单元格数据类型是字符串,我们就去进行子字符串的匹配,说的简单点就是判断指定单元格有没有我们需要找的字符串。 例如:判断单元格J6有没有‘√’,代码如下: Sub aa() Set a = Range...
  • 对前一篇文章进行更新升级,有时候需要给正则表达式进行分类,当匹配到某个正则表达式时,则在相应的位置展示出该正在表达式属于哪一类,这样的话,我们就可以很方面的对自己所要处理的很多数据进行分类了 ...
  • 自制VBA多列相同字段匹配程序.从数据匹配取数的问题,写了个小的VBA程序。请参考和指正!o(∩_∩)o...
  • VBA示例函数之 将数据按类分到不同工作薄,供初学者参考,大牛勿进~~~~~~~
  • 在excel中,通过多个条件,查询一张有横纵坐标(可有子项)中指定条件的数据
  • VBA 关键字匹配查找

    千次阅读 2019-04-24 10:08:32
    '完成对表格单元格中关键字的匹配查找 'Debug.Print "~~~~~~~~~~~~~~~~~~~~~~~~" '变量声明 Dim column_num, row_num, File_sum, Sum_Workbook, search_file, _ temp_Workbook, sheet_num, key_word...
  • 如何比较快速地对比两个数据量比较大的是否存在差异,且每行每列都相同才算匹配。 近段时间工作中,需要对比两个Excel中对应的数据是否相同匹配(保证每一行中每一列数据都相同才算匹配),两个都有15列,加起来...
  • 1.=MATCH(B2,[2.xlsx]Sheet1!$A$2:$A$4,0) MATCH函数含义:返回指定...lookup_value:需要在数据表(lookup_array)中查找的值。可以为数值(数字、文本或逻辑值)或对数字、文本或逻辑值的单元格引用。可以包含通...
  • vba 提取数据

    千次阅读 2018-10-22 12:05:54
    Sub m_loss() Dim d_m, r, r_loss As Integer Dim date_new As Date r = Range("a65536").End(xlUp).Row r_loss = Sheets("LOSS").Range("a65536"...d_m = Int(In...
  • 本软件能实现两个excel文件之间整条数据按某一个列进行强制匹配(excel表格自带匹配功能无法匹配时,可使用本软件解决),并将匹配成功的行数据合并为一整行,之后输出到新的excel中。(匹配的源文件中,未匹配成功...
  • 所以针对这个问题,用VBA写了个分列和保存的宏。 一、使用前说明: 1.要分列的列中间不要出现空内容,比如要分第2列部门,里面有A部门,B部门,还有个空内容的,可能导致计算行数不准。 2.分列后的序号...
  • 大家好,我是海林,今天跟大家分享的VBA小代码主题是数据精确查询与匹配。 我们用王者荣耀的数据来举例,如下图所示。根据A:C列的数据源信息,查询E列英雄名相应的职业类型,如果查询无结果,则返回空白。 此类问题...
  • 前面两篇博客,我们介绍了VBA和使用VBA获取当前工作和另一个工作簿的工作中的数据。这篇我们来说说如何使用VBA模糊查找当前工作中有用的数据。我们有时会遇到这样的情况。我们手头有很多很多老的excel文件,...
  • 浅谈VBA中使用数组处理工作表数据

    千次阅读 2018-02-28 12:55:53
    VBA中最经常涉及的就是读写工作中的单元格,如果读写操作次数较多,或者涉及到的单元格数量较多,往往会导致程序运行效率较低。这时经常用到的解决方法就是使用数组保存数据,在内存中进行数据处理和加工,最后...
  • 我们在日常工作中经常会碰到excel自带公式无法解决的问题,在面对大量数据需要整理计算的时候会消耗大量的时间,如果你了解vba的一些技巧,就可以减少很多工作量。本篇文章将会带你进入一个简单、易懂的自动化世界。...
  • VBA代码做匹配处理

    千次阅读 2014-11-30 13:49:45
    ' 按照发票号码做匹配,重新生成一个明细的表格,本例子的模板是Sheet9 和 Sheet13 'Sheet9 是明细,Sheet13 是汇总的, 需要从这个两个Sheet里重新提取数据到一个新的Sheet14里  'If Workbooks(1).Worksheets...
  • VBA实现多个Sheet页匹配关键字并汇总

    千次阅读 2018-06-06 10:36:28
     用户需求:媳妇统计excel时需要在多个sheet页中搜索关键字,找到匹配的行后再粘贴到新的sheet页中,然后问我有什么快捷的方法,一键式的。 我想了想写个宏,碎碎个事。好了,开始! 实现思路:打开excel,新建一...
  • '双匹配查询,和VLookUp函数类似,不同的是可以匹配2个字段KeyCell匹配数据的第一列,MatchCell 匹配数据的第MatchIndex 列,如果2个都相等则返回数据区域第ReturnIndex列的值 'KeyCell:第一列匹配的单元格 '...
  • VBA过程代码272:利用字典,进行单条件匹配查询 Sub MyNZ () Dim mydic, myarr Sheets("42").Select Set mydic = CreateObject("scripting.dictionary") '将数据放入数组 myarr = Sheets("42").[a1].CurrentRegion ...
  • class ImportorClass Option Explicit Private m_sht As Worksheet Private m_activecell As Range Private m_rowIndex As Long Private m_dictYjzh Private m_ksrq As Date Private m_jzrq As Date ...
  • Sub 按条件查找数据() Application.ScreenUpdating = False Dim i As Integer For i = 3 To 15 If Cells(i, 2).Value <= 50 And Cells(i, 3).Value <= 1500 Then Cells(i, 1).Font.FontStyle = "加粗" Cells...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,396
精华内容 958
关键字:

vba匹配其他表的数据