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

问题描述 投票:0回答:6

有没有一种简单的方法可以同时更新单个 Excel 工作表上多个数据透视表的数据源?

所有数据透视表都引用相同的命名范围,但我需要创建第二个具有相同数据透视表的工作表,但访问不同的命名范围。

理想情况下,我希望能够执行某种搜索和替换操作(就像您可以对公式执行的操作一样),而不是手动更新每个单独的数据透视表。

有什么建议吗?

excel pivot-table
6个回答
13
投票

以下 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

1
投票

假设您愿意使用 VBA,this 可能相关。

如果您迭代每个工作表上的数据透视表集合,您应该能够使用该文章中显示的方法来修改数据源。语法应该非常类似于使用命名范围而不是单元格范围。


1
投票

我组合了上面的代码,现在使用下面的代码,您可以使用表格或范围参考作为源数据。您所要做的就是通过替换

*
符号来输入源数据,然后就可以开始了。

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

0
投票

改编自使用此 VBA 宏代码动态更改数据透视表的数据源范围

  1. 可以设置
    PivotTable.SourceData
    属性,通过
    ChangePivotCache
    方法设置。
  2. 要创建新的
    PivotCache
    ,请致电
    ActiveWorkbook.PivotCaches.Create
  3. 您需要传入
    SourceType
    Range
    作为
    SourceData
  4. 最后,更新后,请务必致电
    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"
替换为数据源所在的位置即可。


0
投票

只需将原始数据转换成表格,就可以解决一切


0
投票

是否可以在 Google Sheets 上而不是 Excel / VBA 上完成?

© www.soinside.com 2019 - 2024. All rights reserved.