[[20201028145906]] 『一つのピボットキャッシュから複数のピボットテー』(しのみや) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『一つのピボットキャッシュから複数のピボットテーブルを作成』(しのみや)

 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.