[Excel VBA办公]VBA代码创建透视表

[Excel VBA办公]VBA代码创建透视表

原始数据如下有日期、单价、数量、金额 4个字段。

创建透视表的关键代码:

将对应字段放在对应的  行xlRowField、列、值AddDataField位置

完整代码:


这个子程序的目的在于创建一个数据透视表,它首先检查是否有一个名为"透视表"的工作表,如果没有,就创建一个。然后,它使用指定的数据源("Sheet1"中的"A1:D100"范围)来创建数据透视表缓存,并在新创建或已存在的工作表上创建数据透视表。最后,它将"日期"字段设置为行字段,并添加了"数量"和"金额"字段作为数据字段,计算它们的总和。

Sub CreatePivotTable()
    ' 定义变量
    Dim ptCache As PivotCache
    Dim pt As PivotTable
    Dim wsSource As Worksheet
    Dim wsDest As Worksheet
    Dim rngSource As Range
    Dim sheetName As String
    Dim sheetExists As Boolean

    ' 设置数据源范围
    ' 将wsSource变量设置为ThisWorkbook(当前工作簿)中的"Sheet1"工作表
    Set wsSource = ThisWorkbook.Sheets("Sheet1")
    ' 将rngSource变量设置为"Sheet1"工作表中的"A1:D100"范围
    Set rngSource = wsSource.Range("A1:D100")
    
    ' 设置透视表工作表的名称
    ' 将sheetName变量设置为"透视表",这是我们将要创建或使用的透视表工作表的名称
    sheetName = "透视表"
    
    ' 检查透视表工作表是否已存在
    ' 初始化sheetExists变量为False,表示默认工作表不存在
    sheetExists = False
    ' 遍历当前工作簿中的所有工作表
    For Each ws In ThisWorkbook.Sheets
        ' 如果找到名称与sheetName相同的工作表,则设置sheetExists为True并退出循环
        If ws.Name = sheetName Then
            sheetExists = True
            Exit For
        End If
    Next ws
    
    ' 如果透视表工作表不存在,则创建它
    ' 如果sheetExists为False,表示需要创建新的工作表
    If Not sheetExists Then
        ' 在工作簿末尾添加一个新的工作表,并将其赋值给wsDest变量
        Set wsDest = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        ' 将新工作表的名称设置为sheetName
        wsDest.Name = sheetName
    Else
        ' 如果透视表工作表已存在,则使用它
        ' 将wsDest变量设置为已存在的名为sheetName的工作表
        Set wsDest = ThisWorkbook.Sheets(sheetName)
    End If
    
    ' 创建数据透视表缓存
    ' 使用rngSource范围内的数据创建一个数据透视表缓存,并将其赋值给ptCache变量
    Set ptCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=rngSource)
    
    ' 创建数据透视表
    ' 在wsDest工作表的"B2"单元格位置创建一个新的数据透视表,命名为"PivotTable1",并将其赋值给pt变量
    Set pt = ptCache.CreatePivotTable(TableDestination:=wsDest.Cells(2, 2), TableName:="PivotTable1")
    
    ' 添加数据透视表字段
    ' 使用With语句来简化对pt对象(数据透视表)的多次引用
    With pt
        ' 将"日期"字段设置为行字段,这意味着数据透视表将按日期分组显示数据
        .PivotFields("日期").Orientation = xlRowField
        ' 添加一个新的数据字段"数量",计算其总和,并命名为"总数量"
        .AddDataField .PivotFields("数量"), "总数量", xlSum
        ' 添加一个新的数据字段"金额",计算其总和,并命名为"总金额"
        .AddDataField .PivotFields("金额"), "总金额", xlSum
    End With
End Sub

SQL+数据透视表+VBA 使数据透视表走向更灵活,更智能,更适用。 这个是我和师傅一撇首度合作,他提供了文件并提出了要求,我帮他实现其效果 下面从几个方面解释一下: 1、功能 一个源文件和一个通过用SQL查询生成的数据透视表 将源文件拖到电脑的任意位置,甚至将文件名也改掉,用VBA配上代码和窗体找到文件,数据透视表仍然能够正常工作 2、套用 现在来讲讲怎么使做出来的东东适应大家的需要 2、1 用OLE DB窗口引用工作或写SQL语句,因为用这个方法同VBA相通,copy下来代码区的的语句 2、2 打开透视文件,将透视中的字段全部拖出来,也就是变成一个空数据透视表。 右击下面工作图标 或者 工具》宏》visual basic 编辑器,点击模块看到代码区 2、3 将2、1步骤copy的语句commandtext的数据Array中的引号中 .CommandText = Array(" ") 可能不同版本会有一些差别,同时SQL语句中如果添加了文本生成新字段,双引号要成对翻倍 如:"出库" AS 单选项 要改成 ""出库"" AS 单选项 2、4 语句太长的处理:在代码区如果你想好看一些,你可以插入“ _”来换行,当然不能插在一个单词或自动名等中间。 2、5 将文件存盘,重新打开就会有了数据,你可以将字段拖入数据透视表中,创建你自己的数据透视表, 2、6 这样文件就可以使用,相信VBA的引导不用教就可以交给别人使用了 下面附上代码,包含3个区: 1、 工作簿去,打开文件时工作 Private Sub Workbook_Open() Dim OP If Dir(Sheets("path").Range("A1")) = "" Then OP = MsgBox("源文件已被移走,请选择下列选项" + Chr(10) + "1、选择是,重新输入文件全名" + Chr(10) + "2、选择否,打开原有的数据透视表" + Chr(10) + "3、选择取消,关闭文件", vbYesNoCancel, "Scarlett温馨提示") If OP = vbYes Then UserForm1.Show End If If OP = vbNo Then ActiveWorkbook.Close True End If If OP = vbCancel Then Exit Sub End If Else Call refreshpv End If End Sub 2、窗体区,实现文件的查找 Private Sub CommandButton1_Click() Dim fopen As FileDialog Set fopen = Application.FileDialog(msoFileDialogFilePicker) fopen.Show TextBox1.Value = fopen.SelectedItems(1) Set fopen = Nothing End Sub Private Sub CommandButton2_Click() If InStr(TextBox1.Value, ".") > 0 Then Sheets("path").Range("A1") = TextBox1.Value Call refreshpv unload me Else MsgBox "文件名要带路径含后缀的文件名", "Scarlett_88温馨提示" TextBox1.SetFocus End If End Sub Private Sub CommandButton3_Click() Unload Me End Sub Private Sub TextBox1_Change() End Sub Private Sub UserForm_Activate() End Sub Private Sub UserForm_Click() TextBox1.Value = Sheets("path").Range("A1") End Sub 3、模块区,实现SQL语句的地址更新和刷新数据透视表的数据源 Sub refreshpv() With ActiveSheet.PivotTables("数据透视表1").PivotCache .Connection = Array( _ "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Sourc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

William数据分析

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值