VBA でピボット テーブルのデータ ソースを変更する

VBA でピボット テーブルのデータ ソースを変更する

ピボット テーブルのデータ ソースを、あるシートから別のデータ ソースに変更できるコードを探しています。データ ソース シートは、データが異なるだけで同一です。

インターネットから取得したコードがありますが、アクティブ シートのデータ ソースを変更する代わりに、すべてのシートのデータ ソースが変更されます。

残念ながら、私は VBA コーディングについてあまり詳しくないので、コードを変更してアクティブ シートのみに影響を与える方法を知りません。誰かが助けてくれることを期待しています。

Option Explicit

Sub ChangeDataSourceForAllPivotTables()

    Dim wb                  As Workbook
    Dim ws                  As Worksheet
    Dim pt                  As PivotTable
    Dim rSourceData         As Range

    If ActiveWorkbook Is Nothing Then Exit Sub

    On Error GoTo ErrHandler

    Set wb = ActiveWorkbook

    Set rSourceData = wb.Worksheets("Sheet1").Range("A1").CurrentRegion 'change the name of the worksheet accordingly

    For Each ws In wb.Worksheets
        For Each pt In ws.PivotTables
            pt.ChangePivotCache wb.PivotCaches.Create(xlDatabase, rSourceData.Address(, , , True))
            pt.RefreshTable
        Next pt
    Next ws

ExitTheSub:
    Set wb = Nothing
    Set ws = Nothing
    Set pt = Nothing
    Set rSourceData = Nothing

    Exit Sub

ErrHandler:
    MsgBox "Error " & Err.Number & ":  " & Err.Description, vbCritical, "Error"
    Resume ExitTheSub

End Sub

ご協力をよろしくお願いいたします!

答え1

このコードは、特定のシート内のすべてのピボット テーブルのソース データを変更するのに役立ちます。

Sub ChangePivotSourceData()

Dim pt As PivotTable

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

End Sub

使い方:

  • Copy&Pasteこのコードは としてStandard Module
  • Sheet名前はSource Data編集可能です。
  • このコードではマイデータ名前付き範囲、あなたが作成する必要があるもの走る 変更したいときは毎回このコードを入力してくださいピボットテーブルのソースデータ

答え2

たとえば、ドキュメントを宛先ごとに分割し、関連するピボット チャートを含むさまざまな特定のファイル (宛先ごとに) を自動的に作成したいと思います。新しいピボット チャートのデータ ソースを毎回更新するにはどうすればよいでしょうか (スペイン、イタリア、フランスなど)。元のデータ ソースはすべての宛先 (ヨーロッパ) で保持されます。よろしくお願いします。

Dim pt As PivotTable
    Dim MyData As Excel.ListObject
   
    Set MyData = Application.Range(Europe).ListObject
   
For Each pt In ActiveWorkbook.Worksheets("Chart - City").PivotTables
         pt.ChangePivotCache ActiveWorkbook.PivotCaches.Create _
            (SourceType:=xlDatabase, SourceData:="MyData")
Next pt

関連情報