在Excel中更新多个数据透视表上的数据源

fhity93d  于 2023-01-27  发布在  其他
关注(0)|答案(5)|浏览(1061)

是否有一种简单的方法可以同时更新单个Excel工作表上多个数据透视表的数据源?
所有数据透视表都引用相同的命名区域,但我需要创建第二个工作表,该工作表具有相同的数据透视表,但访问不同的命名区域。
理想情况下,我希望能够执行某种搜索和替换操作(就像您可以对公式执行的操作一样),而不是手动更新每个单独的透视表。
有什么建议吗?

6vl6ewon

6vl6ewon1#

下面的VBA代码将更改单个工作表上所有数据透视表的数据源。
您需要将Sheet2参数更新为包含新透视表的工作表的名称,并将Data2参数更新为新命名的范围。

Sub Change_Pivot_Source()

    Dim pt As PivotTable

    For Each pt In ActiveWorkbook.Worksheets("Sheet2").PivotTables
             pt.ChangePivotCache ActiveWorkbook.PivotCaches.Create _
                (SourceType:=xlDatabase, SourceData:="Data2")
    Next pt

End Sub
zy1mlcev

zy1mlcev2#

假设您愿意使用VBA,this可能是相关的。
如果你在每个工作表上遍历数据透视表集合,你应该能够使用那篇文章中显示的方法来修改数据源。语法应该非常类似于使用命名区域而不是单元格区域。

6ioyuze2

6ioyuze23#

我结合了上面的两段代码,现在你可以用下面的代码来引用你的源数据,你所要做的就是把*符号替换成你的源数据,然后你就可以开始了。

Sub Change_Pivot_Source()

Dim pt As PivotTable
Dim ws As Worksheet

For Each ws In ActiveWorkbook.Worksheets

For Each pt In ws.PivotTables
         pt.ChangePivotCache ActiveWorkbook.PivotCaches.Create _
            (SourceType:=xlDatabase, SourceData:="*****")
Next pt
Next ws

End Sub
83qze16e

83qze16e4#

改编自Dynamically Change A Pivot Table's Data Source Range With This VBA Macro Code
1.可以设置[PivotTable](https://learn.microsoft.com/en-us/office/vba/api/Excel.PivotTable) . [SourceData](https://learn.microsoft.com/en-us/office/vba/api/Excel.PivotTable.SourceData)属性,该属性通过ChangePivotCache方法设置。
1.要创建新的PivotCache,请调用[ActiveWorkbook](https://learn.microsoft.com/en-us/office/vba/api/Excel.Application.ActiveWorkbook) . [PivotCaches](https://learn.microsoft.com/en-us/office/vba/api/Excel.PivotCaches) . [Create](https://learn.microsoft.com/en-us/office/vba/api/excel.pivotcaches.create)
1.您需要传入一个SourceType和一个Range作为SourceData
1.最后,更新后,确保调用RefreshTable来应用更改。
下面的示例将自动查找工作簿中的每个数据透视表并对其进行更新。

Sub AdjustPivotDataRange()
    Dim pt As PivotTable, pc As PivotCache
    Dim dataSheet As Worksheet, ws As Worksheet
    Dim startPoint As Range, dataSource As Range, newRange As String

    ' get worksheet with data
    Set dataSheet = ThisWorkbook.Worksheets("Sheet1")

    ' Dynamically Retrieve Range Address of Data
    Set startPoint = dataSheet.Range("A1")
    Set dataSource = dataSheet.Range(startPoint, startPoint.SpecialCells(xlLastCell))
    newRange = dataSheet.Name & "!" & dataSource.Address(ReferenceStyle:=xlR1C1)

    ' create new PivotCache
    Set pc = ActiveWorkbook.PivotCaches.Create( _
               SourceType:=xlDatabase, _
               SourceData:=newRange)

    ' loop through all tables in all sheets
    For Each ws In ActiveWorkbook.Worksheets
        For Each pt In ws.PivotTables

            ' update pivot source and refresh
            pt.ChangePivotCache pc
            pt.RefreshTable

        Next pt
    Next ws

End Sub

只需将"Sheet1"替换为数据源所在的位置。

ncecgwcz

ncecgwcz5#

我只要把原始数据转换成表格,就可以解决所有问题

相关问题