有没有一种简单的方法可以同时更新单个 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,this 可能相关。
如果您迭代每个工作表上的数据透视表集合,您应该能够使用该文章中显示的方法来修改数据源。语法应该非常类似于使用命名范围而不是单元格范围。
我组合了上面的代码,现在使用下面的代码,您可以使用表格或范围参考作为源数据。您所要做的就是通过替换
*
符号来输入源数据,然后就可以开始了。
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
和 Range
作为 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"
替换为数据源所在的位置即可。
只需将原始数据转换成表格,就可以解决一切
是否可以在 Google Sheets 上而不是 Excel / VBA 上完成?