|
|
| Excel VBA Macro ・ 値の操作 ・ FAQ |
|
ピボットテーブルレポートを店名フィールドのアイテム別に印刷するには?
|
|
|
|
Question 83.2 |
Excel VBA Borad (掲示板)より |
 |
 |
|
|
初めて質問致します。よろしくお願いします。つい最近マクロを触り始めたばかりの者です。
ピボットテーブルを選択したページフィールドアイテムごとに表示させ、それぞれ印刷するマクロを組みたいのですが、うまくいきません。

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

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

「Mチェック.xls」の「店別」シート
上記マクロの "オバマ" のところの店名を、
抽出済みの別のリスト (左図) から順に読み込んで、
印刷できればと思ったのですが。
不勉強で申し訳ありませんが教えて頂けると幸いです。
|
|
Answer |
Copyright (C) 2007.7.19 永井善王 |
|
|
「つい最近マクロを触り始めたばかり」ということですが、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回避もうまく行きました)
|
|
|
|
|