• ベストアンサー

ピボットテーブルの連続印刷のマクロを組みたいと思っています。

会社で複数の他社の年末調整を請け負っているのですが、 データを整理するためにピボットテーブルを使用しています。 コード・氏名 年月 支払額 社会保険 源泉 1a 1901 100000 1000 100 2b 1901 200000 2000 200 3c 1901 300000 3000 300 4d 1901 400000 4000 300 100計       1901 1000000 10000 1000 エクセルにて↑のような書式で、1月~12月(夏季・冬季賞与含)まで作成していき、 ピボットテーブルをボタン一つで作成できるマクロまで組むことが出来たのですが、 完成したピボットテーブルのデータ(1aの1月~12月、2bの1月~12月)を自動で連続印刷できる マクロを作成したいのですが、うまくいきません。 コード・氏名 100計 (←の部分がプルダウン式になっていまして、1a 2b のように選択できます) 年月 支払額    社会保険 源泉 1901 1,500,000 150,000    15,000 1902 1,500,000 150,000    15,000 1903 1,500,000 150,000     15,000 1904 1,500,000 150,000 15,000 1905 1,500,000 150,000    15,000 1906 1,500,000 150,000   15,000 1907 1,500,000 150,000    15,000 1908 1,500,000 150,000 15,000 1909 1,500,000 150,000    15,000 1910 1,500,000 150,000 15,000 1911 1,500,000 150,000    15,000 1912 1,500,000 150,000 15,000 賞与夏 1,500,000 150,000    15,000 賞与冬 1,500,000 150,000    15,000 総計 21,000,000 2,100,000 210,000 ↑ピボットテーブルは、↑のように表示されます。 (レイアウトがガタガタになっていますが、すみません) 会社によって、人数が数人でしたり、数十人だったりしまして、 できれば人数に応じて対応できる印刷用のマクロを教えていただきたいと思っています。 どうぞ、皆さんのお力を貸してください。 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • OtenkiAme
  • ベストアンサー率77% (69/89)
回答No.3

こんにちは。 > ちょっと構文を打ってみたら、私の実力不足で失敗してしまったのですが、 > 教えていただいた構文に、確かな手ごたえを感じました。 ヒントのコードです。条件のつけ方などは、元データがわからないので 書きませんが、今後のコードのメンテナンスは、fenril-kniさんが行う わけですから変数は別にして、分からないコードは、 fenril-kniさんご自身で調べて自分のものにしてくださいね。 がんばってください。(^o^)/ Sub PageItemPrintOut() Dim PvtTbl As PivotTable, PvtFld As PivotField, PvtItem As PivotItem Set PvtTbl = ActiveSheet.PivotTables(1)   '←必要なら変更 Set PvtFld = PvtTbl.PivotFields("hogehoge") '←要変更 On Error Resume Next ActiveSheet.PageSetup.PrintArea = "" For Each PvtItem In PvtFld.PivotItems   If PvtItem.Caption <> "(All)" Then     PvtFld.CurrentPage = PvtItem.Caption     PvtTbl.TableRange2.PrintPreview '    PvtTbl.TableRange2.PrintOut   End If Next PvtItem PvtFld.CurrentPage = "(All)" On Error GoTo 0 Set PvtFld = Nothing Set PvtTbl = Nothing End Sub

noname#58462
質問者

お礼

お礼を申し上げるのがおそくなってしまい、大変失礼いたしました。 重ね重ね、ありがとうございます。 OtenkiAmeさんに教えていただいた構文を軸に、 データの調節や罫線等の設定もこちらで加えまして、見事に完成させることが出来ました。 望んでいたデータが整然とプリントアウトできた瞬間、本当に嬉しかったですし、感動しました! 本当にありがとうございました。 心からお礼申し上げます。 これを機に、これからも精進いたします!(*^_^*)

その他の回答 (2)

  • OtenkiAme
  • ベストアンサー率77% (69/89)
回答No.2

こんにちは。 > コード・氏名 100計 (←の部分がプルダウン式になっていまして、1a 2b のように選択できます) の部分は、ページエリアのフィールドですよね。 でしたら、 For Each 各アイテム In ページエリアのフィールド  ページエリアのフィールド.CurrentPage = 各アイテム  印刷範囲の設定 = ピボットテーブル.TableRange2.Address  印刷 Next 各アイテム でいいんじゃないでしょうか?

noname#58462
質問者

お礼

なるほど!そういう手もあるんですね ちょっと構文を打ってみたら、私の実力不足で失敗してしまったのですが、 教えていただいた構文に、確かな手ごたえを感じました。 かなり前進できました!本当にありがとうございました。 頑張ってみます。

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.1

この際丁寧に状況を質問に書いているのは良いが、ポイントは下記だと思う。 ーー 1つののピボットテーブルがマクロの記録で判ったのですね。 もう1つのピボットテーブルのマクロの記録をとってください。2つを比べてください。変わって(違って)いる箇所はどこですか。 第3の場合はどう変わると予想しますか。 ーー データ数で変わる(変える)べきところはどこですか。 例えばデータ行の最終行などは変わりますが、定石があります。 d=Range("A65536").End(xlUp).Row のような手法です。 ーー そこでその変え方をVBAコードで実現するとき、どう書いたらよいですか? と質問文に書くべきなのです。 ーー プログラムは、変えるべきところを変えて、繰り返し処理に持ち込むのが要諦です。 ーー ActiveSheet式の記録があれば、ActiveSheetの変化のさせ方などは 初めは難しいでしょうが、それはそう質問すればよい。 ーーー 現状のことを説明して、回答者に全て書いてもらうというのは、いつまでたっても上達しませんし、回答者は下請け者ではない。

noname#58462
質問者

お礼

ええそうですね、仰るとおりです。 わざわざご親切にありがとうございましたvv これからの参考にいたします

関連するQ&A