[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『一つのピボットキャッシュから複数のピボットテーブルを作成』(しのみや)
Dataシートをもとに2種類のピボットを作っています
ピボットテーブルのマクロを確認していると ピボットキャッシュを作ってからピボットテーブルを作る流れになっているようで 一度作成したピボットキャッシュから複数のピボットテーブルを作成できるとのこと
http://officetanaka.net/excel/vba/tips/tips156.htm
マクロの記録を取って、必要な記述のみにしてみましたが 一つのピボットキャッシュから複数のピボットテーブルを作成するには どのように書き換えたらよいか教えて下さい
先にシートを作ってそこにピボットテーブルを貼り付ける方法にしています
Public Sub Sub分析()
With Sheets("Data")
Cur最終行 = .Cells(Rows.Count, "A").End(xlUp).Row Cur最終列 = .Cells(1, Columns.Count).End(xlToLeft).Column
End With
'ピボット40 Sheets.Add.Name = "ピボット40" ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ SourceData:="Data!R1C1:R" & Cur最終行 & "C" & Cur最終列, _ Version:=xlPivotTableVersion14). _ CreatePivotTable TableDestination:="ピボット40!R1C1", _ TableName:="ピボットテーブル1"
ActiveSheet.PivotTables("ピボットテーブル1").AddDataField _ ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("番号"), "データの個数 / 番号", xlCount
With ActiveSheet.PivotTables("ピボットテーブル1") .PivotFields("[区分]").Orientation = xlRowField .PivotFields("[A]").Orientation = xlRowField .PivotFields("[年月]").Orientation = xlColumnField .PivotFields("[名前]").Orientation = xlColumnField End With
'ピボット43 Sheets.Add.Name = "ピボット43" ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ SourceData:="Data!R1C1:R" & Cur最終行 & "C" & Cur最終列, _ Version:=xlPivotTableVersion14). _ CreatePivotTable TableDestination:="ピボット43!R1C1", _ TableName:="ピボットテーブル2"
ActiveSheet.PivotTables("ピボットテーブル2").AddDataField _ ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("番号"), "データの個数 / 番号", xlCount
With ActiveSheet.PivotTables("ピボットテーブル2") .PivotFields("[ナンバー]").Orientation = xlRowField .PivotFields("[年月]").Orientation = xlColumnField .PivotFields("[A]").Orientation = xlColumnField End With
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows10 >
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ SourceData:="Data!R1C1:R" & Cur最終行 & "C" & Cur最終列, _ Version:=xlPivotTableVersion14). _ CreatePivotTable TableDestination:="ピボット40!R1C1", _ TableName:="ピボットテーブル1"
↑上記のうち
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ SourceData:="Data!R1C1:R" & Cur最終行 & "C" & Cur最終列, _ Version:=xlPivotTableVersion14) までがピボットキャッシュを作る命令文です。 で、 Createメソッド(メソッド=命令)で出来たピボットキャッシュに対して、 CreatePivotTableの命令をすることで、ピボットテーブルの領域が作成されます。 グーグルで翻訳すると、 Create → 作成する なので、イメージはなんとなくわかりますよね?
で、上記のコードのうち、
PivotCaches
に注目してください。
PivotCacheではなくPivotCachesと複数形になっています。
これは、いくつかあるであろう(0個かもしれないし1個かもしれないし10個かもしれない)、
ピボットキャッシュの集まりを表現するのに複数形になっているようです。
なので、今、ピボットキャッシュを作ったので、
ブック上には1個のピボットキャッシュがあるはずです。
なので、
次同じピボットキャッシュを再利用したいなら、
ブック上のピボットキャッシュの1番目に対して、
CreatePivotTableの命令をしてやればいいことになります。
VBAのコード的には
ActiveWorkbook.PivotCaches(1).CreatePivotTable TableDestination:="ピボット43!R1C1", _ TableName:="ピボットテーブル2"
のようなことになるはずです。
参考URL>>
https://www.relief.jp/docs/018038.html
田中さんのサイトも充実していますが、
インストラクターさんの方も充実してますので、
参考になると思います。
あと、変数の宣言をされてないようなので、
http://officetanaka.net/excel/vba/beginner/06.htm
この辺を読んだり、
「オブジェクトとオブジェクト変数」についても理解を深めておいた方が、
今後の開発により良いかと思いました。
(まっつわん) 2020/10/28(水) 15:43
まっつあんさん ありがとうございます 必要な動きができました
変数はPublicで別シートに作成しておりました 詳細までお教え下さり助かります しっかり身に付くよう勉強します
(しのみや) 2020/10/28(水) 15:56
>変数はPublicで別シートに作成しておりました
もしかして同じ変数を色々なプロシージャで使いまわしてるってことですか?
そのような変数の使い方はやめた方がいいし、
使っているならちゃんと説明しないと。
提示されたものだけしかこちらにはわからないので、
こちらの環境ではコンパイルエラーになり、めんどくさいことになります。
「変数 適用範囲」
あるいは
「変数 スコープ」で調べてみてください。
(まっつわん) 2020/10/28(水) 18:27
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.