ピボットテーブルのバージョンを指定しないとどうなる?(失敗談)
定期的に、ピボットテーブルをマクロで作成したくなることがある。そこで試しにマクロの記録で作ってみて、少し整理すると、このような記述になる。
Sub Test() Dim Tb As ListObject Set Tb = ActiveSheet.ListObjects(1) Dim Sh As Worksheet Sheets.Add Set Sh = ActiveSheet ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ SourceData:=Tb, _ Version:=6).CreatePivotTable TableDestination:=Sh.Cells(3, 1), _ TableName:="ピボットテーブル2", _ DefaultVersion:=6 End Sub
この中の「Version」が、なかなか厄介だ。
Excelのバージョンが混在する環境においては、例えば
- Excel2013で、マクロの記録で作成したものを編集する。
- Excel2010端末に利用者に渡す。
- バージョン違いでエラー発生。
を何度か経験している。
そこで、今まではExcelのバージョンを確認したうえで、対応するピボットテーブルのバージョンで作成することでエラーを回避していた。
docs.microsoft.com
そして、ふと閃いた。バージョンを指定しないで作成したら、どうなるのだろう?早速やってみた。
Sub Test() Dim Tb As ListObject Set Tb = ActiveSheet.ListObjects(1) Dim Sh As Worksheet Sheets.Add Set Sh = ActiveSheet ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ SourceData:=Tb).CreatePivotTable TableDestination:=Sh.Cells(3, 1), _ TableName:="ピボットテーブル2" End Sub
何だか、できたような気がする。
何だ、こんなに簡単なことだったのか。今までの苦労は何だったのか。
でも心配なので、作成したピボットテーブルのバージョンを確認してみた。
MsgBox Sh.PivotTables(1).Version
バージョンは、「3」とでた。
あれ?「6」だったのでは?
元のコードで試してみる。
確かに「6」だ。
というわけで、前言撤回。
バージョン指定を省いての運用は、もう少し詳細を調べて見極めてからにします。
参考まで。