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

对应的数据透视表名称

相关推荐
灵析表格11 小时前
WPS Excel官方函数扩展库数据安全加密校验函数深度研究报告:Excel国密SM3/SM4加解密、MD5摘要、UUID、Base64与URL编解码全栈解析
excel·wps
AC赳赳老秦16 小时前
网页公开附件自动采集:OpenClaw 批量下载页面内嵌 Word/Excel 附件,统一格式后结构化入库
java·python·word·php·excel·deepseek·openclaw
VBAMatrix1 天前
表格导航!实现Word合并附注与多个Excel的数据同步
word·excel·审计报告·审计·会计师事务所·报告工具
AI英德西牛仔2 天前
手机文心怎么导出文档?AI 导出鸭一键解决格式崩塌与批量归档难题
人工智能·智能手机·excel·deepseek·ai导出鸭
AI导出鸭2 天前
Grok苹果版导出表格的工程化解耦方案:AI导出鸭的技术逻辑与批量实践
人工智能·excel·ai导出鸭
reasonsummer2 天前
【办公类110-05】20260807园园通小班“待补充”户籍地址自动修改(Python+EXCEL)
开发语言·python·excel
qq83443103 天前
一款纯前端的excel控件,XuY_Sheet 电子表格组件教程
前端·excel·教程·luckysheet·xuy_sheet控件·前端表格控件
开开心心就好3 天前
免费压缩软件WinRAR无弹窗、广告干扰
java·开发语言·前端·数据库·python·excel·winrar
AI导出鸭3 天前
怎么让千问做表格?AI导出鸭苹果版将千问输出的管道表格智能解析为二维结构,一键导出为Excel或Word标准表格。
人工智能·chatgpt·word·excel·ai导出鸭
xiaopai9455 天前
工程项目管理系统选型:WPS/Excel为何难以替代专业系统的数据关联逻辑
excel·wps·项目管理系统·建米软件