1 つの Excel シートで複数のピボット テーブルのデータ ソースを同時に更新する簡単な方法はありますか?
すべてのピボット テーブルは同じ名前付き範囲を参照しますが、同じピボット テーブルを持つが別の名前付き範囲にアクセスする 2 番目のワークシートを作成する必要があります。
理想的には、個々のピボット テーブルを手動で更新するのではなく、ある種の検索と置換操作 (数式で実行できるように) を実行できるようにしたいと考えています。
助言がありますか?
1 つの Excel シートで複数のピボット テーブルのデータ ソースを同時に更新する簡単な方法はありますか?
すべてのピボット テーブルは同じ名前付き範囲を参照しますが、同じピボット テーブルを持つが別の名前付き範囲にアクセスする 2 番目のワークシートを作成する必要があります。
理想的には、個々のピボット テーブルを手動で更新するのではなく、ある種の検索と置換操作 (数式で実行できるように) を実行できるようにしたいと考えています。
助言がありますか?
次の VBA コードは、1 つのワークシートのすべてのピボット テーブルのデータ ソースを変更します。
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を使用する意思があると仮定すると、これは適切な場合があります。
各シートのピボットテーブルコレクションを反復処理すると、その投稿に示されている方法を使用してデータソースを修正できるはずです。構文は、セルの範囲ではなく名前付き範囲を使用する場合と非常によく似ている必要があります。
この VBA マクロ コードを使用して、ピボット テーブルのデータ ソース範囲を動的に変更するから適応:
PivotTable.SourceData
ChangePivotCache
PivotCache
、 を呼び出しますActiveWorkbook.PivotCaches.Create
SourceType
aと aRange
を 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"
データソースがある場所に 置き換えるだけです。