ピボットテーブルレポートを店名フィールドのアイテム別に印刷するには?

Question 83.2 Excel VBA Borad (掲示板)より Previous Next
初めて質問致します。よろしくお願いします。つい最近マクロを触り始めたばかりの者です。
ピボットテーブルを選択したページフィールドアイテムごとに表示させ、それぞれ印刷するマクロを組みたいのですが、うまくいきません。
「元データ.csv」の「元データ」シート
「元データ.csv」の「元データ」シート

左図のデータから、下図のピボットテーブルレポートを作成してあります。


「Mチェック.xls」の「データ」シート
「Mチェック.xls」の「データ」シート

"ピボットテーブル1" です。








このシートを印刷するために、下記のマクロを作成しました。
Public Sub ピボットテーブル店別印刷()
    ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("店名"). _
        CurrentPage = "オバマ"
    Worksheets("データ").PrintOut
End Sub
投稿画像
「Mチェック.xls」の「店別」シート

上記マクロの
"オバマ" のところの店名を、
抽出済みの別のリスト (左図) から順に読み込んで、
印刷できればと思ったのですが。

不勉強で申し訳ありませんが教えて頂けると幸いです。
Answer   Copyright (C) 2007.7.19 永井善王
「Mチェック.xls」の「データ」シート 「つい最近マクロを触り始めたばかり」ということですが、Excelの知識、特にピボットテーブル関係については造詣が深いようですね。

あなたのご希望は、「ピボットテーブル1」の店名を順に変えて印刷したいのですね。最初は「オバマ」、次は「ツルガ」と。

「Mチェック.xls」の「店別」シートは、そのため、店名を掴むために考えられたのですね。
もちろん、この路線に沿って進むことは可能ですが、店名の一覧は右図のように、「Mチェック.xls」の 「データ」シートの 「店名」フィールドの右側にあるドロップダウン矢印 (▼) をクリックすれば表示されることで分かるように、「店別」シートがなくても処理可能です。

下記のマクロでは、5行目で店名を取得し、6行目でその店名のページを表示しています。
Sub ピボットテーブルレポートを店名フィールドのアイテム別に印刷する()
    Worksheets("データ").Activate
    With ActiveSheet.Range("B3").PivotTable   '現在シートのB3セルのピボットテーブルの
        For Each 各アイテム In .PivotFields("店名").PivotItems
                                                        '店名フィールドの各アイテム
            店名 = 各アイテム.Name                      'アイテムの名前を取得
            .PivotFields("店名").CurrentPage = 店名     '表示するページを設定
            ActiveWindow.SelectedSheets.PrintPreview    '印刷プレビュー
            ActiveSheet.PrintOut                        '印刷
        Next
    End With
End Sub
あなたは、マクロについても向上心がお有りで努力されているようですから、クドクドとした解説は控えます。 まずは、上記マクロをじっくりと解明してみてください。
そして、店名があってもデータがない場合の処理とか、時間があったら探求されるとよろしいかと思います。
結果をお知らせください。


サンプルブックのダウンロードは ここをクリック  (YNxv9887_Pivot.lzh 18KB)
※ 一旦、ハードディスクに保存し、解凍してから実行してください。
ありがとうございました
さっそくマクロを修正し、無事実行することができました。
For...Each...Next や PivotItems などもいじくり回してはいたのですが、こうやって使うものなのかと勉強になりました(特に.Nameの記載)。
以前の職場ではピボットテーブルを使うことが多く慣れているため、今後は本当に役にたてられそうです。
「ExcelVBAマクロ組み方講座」も購入しましたので、これからも自分で工夫してみたいと考えています。
(データなしのError回避もうまく行きました)

 

Excel VBA Macro