VBA实现Excel的数据透视表

前言

本节会介绍通过VBA的PivotCaches.Create 方法实现Excel创建新的数据透视表、修改原有的数据透视表的数据源以及刷新数据透视表内容。

本节测试内容以下表信息为例


1、创建数据透视表

语法:PivotCaches.Create(SourceType, [SourceData], [Version])
说明:

SourceType :必填参数 ,可以是以下 XlPivotTableSourceType 常量之一: xlConsolidation、 xlDatabase 或 xlExternal
SourceData :非必填 ,新数据透视表缓存的数据。
Version :版本,非必填,可以是常量xlPivotTableVersion2000,对应Excel 2000,也可以是xlPivotTableVersion10、xlPivotTableVersion11、xlPivotTableVersion12、xlPivotTableVersion14、xlPivotTableVersion15分别表示Excel 2002、2003、2007、2010、2013

示例:

根据上表内容,在原sheet2上创建一个数据透视表,起始位置为J1,透视表设置行为名称、产品编号,列设置为生产年月,值为销售数量求和,完整的代码如下:

c 复制代码
Sub CreatePivot()
    
    ' 声明工作簿、工作表变量
    Dim wb As Workbook
    Dim ws As Worksheet
    ' 声明数据源、透视表目标起始位置、数据透视表变量
    Dim dataSource As Range
    Dim datePivot As Range
    Dim newPivot  As PivotTable
    
    '设置工作簿为当前文件
    Set wb = ThisWorkbook
    Set ws = ThisWorkbook.Worksheets("Sheet2")
    
    ' 通过A列获取最大行数
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    ' 定义数据源范围
    Set dataSource = ws.Range("A1:F" & lastRow)
    ' 定义透视表目的起始位置
    
    ' 创建一个新的数据透视表
    Set newPivot = wb.PivotCaches.Create(xlDatabase, dataSource).CreatePivotTable(ws.Range("J1"), "PivotTable123")
    
    ' 定义透视表的行列值
    With newPivot
        .PivotFields("名称").Orientation = xlRowField
        .PivotFields("商品编号").Orientation = xlRowField
        .PivotFields("生产年月").Orientation = xlColumnField
        With .PivotFields("销售数量")
            .Orientation = xlDataField
            .Function = xlSum
        End With
    End With
      
End Sub

代码说明:

注意 PivotCaches.Create 是用在workbook后面的方法属性

CreatePivotTable 用来指定创建的透视表的位置 以及透视表的名称,若想要在一张新的工作表创建,如想在sheet3中创建,则可以将上述代码中的ws.Range("J1")改为ThisWorkbook.Worksheets("Sheet3").Range("A1"),前提是该工作簿中存在Sheet3工作表

2. 修改数据透视表的数据源

如上例类似,修改已有的数据透视表的数据源,修改为A1:F20,完整的代码如下:

c 复制代码
Sub UpdatePivotSourceData()

    ' 声明工作簿、工作表变量
    Dim wb As Workbook
    Dim ws As Worksheet
    ' 声明数据源、透视表目标起始位置、数据透视表变量
    Dim dataSource As Range
    Dim datePivot As Range
    Dim pt As PivotTable
    
    '设置工作簿为当前文件
    Set wb = ThisWorkbook
    Set ws = ThisWorkbook.Worksheets("Sheet2")
    
    ' 设置要修改的数据透视表名称
    Set pt = ws.PivotTables("PivotTable123")
    
    ' 修改数据透视表的数据范围
    pt.sourceData = ws.Range("A1:F20").Address(True, True, xlR1C1, True)
    
    ' 刷新数据透视表
    pt.RefreshTable

End Sub

3. 刷新数据透视表

pt.RefreshTable

pt表示对应的数据透视表,如以下代码:

c 复制代码
Sub RefreshPivot
	Dim pt As PivotTable
	Dim ws As Worksheet

	Set ws = ThisWorkbook.Worksheets("Sheet2")
	' 设置要修改的数据透视表名称
    Set pt = ws.PivotTables("PivotTable123")

	' 刷新数据透视表
    pt.RefreshTable
    
End Sub

对应的数据透视表名称

相关推荐
徐同保10 小时前
vue 在线预览word和excel
vue.js·word·excel
kaixin_啊啊14 小时前
计算机二级office操作技巧——Excel篇
excel
~在杰难逃~1 天前
关于订单信息的Excel数据分析报告
笔记·数据分析·excel·数据分析报告
生产队队长1 天前
SpringBoot2:web开发常用功能实现及原理解析-整合EasyExcel实现Excel导入导出功能
spring boot·excel
麋鹿会飞但不飘1 天前
EasyExcel拿表头(二级表头)爬坑,invokeHeadMap方法
java·spring boot·excel
Eiceblue1 天前
Python 实现Excel XLS和XLSX格式相互转换
vscode·python·pycharm·excel
if时光重来2 天前
springboot项目实现导出excel动态设置表头
spring boot·后端·excel
我是Superman丶2 天前
【工具】Java Excel转图片
java·python·excel
說詤榢2 天前
判断2个excel文件差异的条数
excel
镜花照无眠2 天前
Excel爬虫使用实例-百度热搜
爬虫·excel