是否有一种简单的方法可以同时更新单个 Excel 工作表上多个数据透视表的数据源?
所有数据透视表都引用相同的命名范围,但我需要创建第二个具有相同数据透视表但访问不同命名范围的工作表。
理想情况下,我希望能够进行某种搜索和替换操作(就像你可以在公式上做的那样),而不是手动更新每个单独的数据透视表。
有什么建议么?
是否有一种简单的方法可以同时更新单个 Excel 工作表上多个数据透视表的数据源?
所有数据透视表都引用相同的命名范围,但我需要创建第二个具有相同数据透视表但访问不同命名范围的工作表。
理想情况下,我希望能够进行某种搜索和替换操作(就像你可以在公式上做的那样),而不是手动更新每个单独的数据透视表。
有什么建议么?
以下 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
假设您愿意使用 VBA,这可能是相关的。
如果您遍历每个工作表上的数据透视表集合,您应该能够使用该帖子中显示的方法来修改数据源。语法应该非常类似于使用命名范围而不是单元格范围。
我结合了上面的代码,现在结合下面的代码,您可以对源数据使用表或范围引用。您所要做的就是通过替换*
符号将源数据放入您的源数据中,然后您就可以开始了。
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
改编自使用此 VBA 宏代码动态更改数据透视表的数据源范围:
PivotTable.SourceData
ChangePivotCache
PivotCache
,调用ActiveWorkbook.PivotCaches.Create
SourceType
和 a Range
as SourceData
。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"
为您的数据源所在的位置。