Excelで欠かせないピボットテーブル。
データを瞬時に集計できるのがその魅力です。
ただ、データの修正や追加があった場合には、ピボットテーブルの更新をする必要があり、それをマクロで自動化してみようというのが今回のはなしです。
ピボットテーブルは更新が必要
Excelでよく使う昨日の1つ、ピボットテーブル。
データを並べて、テーブルにしておき、
Excelの「テーブル」は超スグレモノ 見やすさ、使いやすさ100点の表に一瞬で変わる! | GO for IT 〜 税理士 植村 豪 OFFICIAL BLOG
ピボットテーブルにすることでデータの集計ができます。
売上を商品別、月別に集計するならピボットテーブル SUMIFSよりも自由でかんたん | GO for IT 〜 税理士 植村 豪 OFFICIAL BLOG
「ピボットテーブル×相続」亡くなった方のお金の動きをつかむ方法。 | GO for IT 〜 税理士 植村 豪 OFFICIAL BLOG
SUMを使って集計するとなると、リストの一番下で合計するので表になります。

ただ、ピボットテーブルを使えば、集計の行はいらないです。
別の場所、シートに集計をまとめることができるのです。
なので、データの追加があっても、集計行を気にせずにデータを追加していけばいい、データベースとしてまとめておけるというのもピボットテーブルを使うメリットです。
もし、データの追加や修正があった場合には、ピボットテーブルにカーソルをあてた状態でAlt+F5キー。
ピボットテーブルも更新されます。

このピボットテーブルの更新をマクロでできないか?というのが今回のはなしです。
ピボットテーブルを自動更新するマクロ
今回のしくみはこういうものです。
データベースをつくっておき、データを別シートでピボットテーブル集計。

その集計したデータ(数字は適当です。)を

XLOOKUPを使って提出資料に反映。で、合計表と財産と債務の明細をPDFファイルで出力するというしくみです。

この一連の処理をやろうとすると、
・データの追加、修正
・ピボットテーブルの更新
・PDFファイル形式でinbox(任意の場所)に保存
・ファイルを上書き保存
ということを手でやらないといけません。
これを自動化するとなると、マクロの力が必要で、ピボットテーブルの更新を自動でやるということです。
ピボットテーブルの更新をマクロで書くと
ピボットテーブルの更新をマクロで書くとこうなります。
1 2 3 4 5 6 7 8 9 |
Sub RefreshAndSavePDF() Dim ws Dim pt ' シート「集計」のピボットテーブルを更新 Set ws = ThisWorkbook.Sheets("集計") For Each pt In ws.PivotTables pt.RefreshTable Next |
シート集計にあるピボットテーブルは2つ。

「For Each pt In ws.PivotTables」〜「Next」で両方のピボットテーブルで、「〜」にある処理を繰り返すということを意味しています。
「〜」というのは、間にある「RefreshTable」。ピボットテーブルの更新です。
テーブルのデータに変更があった場合、ピボットテーブルが更新されないともとのデータのままで反映されないため、ここ最新のデータに更新するわけです。
これでピボットテーブルの更新処理はマクロでできました。
ちなみに今回やろうとしていた流れをマクロでまとめた記載は以下にして載せておきます。
開くとマクロがあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Sub RefreshAndSavePDF() Dim ws Dim FilePath Dim SheetsToExport Dim yearValue Dim pt ' 1. シート「集計」のピボットテーブルを更新 Set ws = ThisWorkbook.Sheets("集計") For Each pt In ws.PivotTables pt.RefreshTable Next ' 2. シート「使い方」のB2セルの値を引用(年のデータ) yearValue = ThisWorkbook.Sheets("使い方").Range("B2").Value ' 3. PDFとして保存 FilePath = "\\Mac\Dropbox\0 inbox\財産債務調書" & yearValue & "(提出版).pdf" SheetsToExport = Array("財産債務調書", "財産明細", "債務明細") ThisWorkbook.Sheets(SheetsToExport).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FilePath, Quality:=xlQualityStandard ' 4. シート「財産債務調書」を選択 ThisWorkbook.Sheets("財産債務調書").Select ' 5. Excelファイルを上書き保存 ThisWorkbook.Save ' 6. Excelファイルを閉じる ThisWorkbook.Close End Sub |
ChatGPTに聞くと「MsgBox “処理が完了しました!”」などいらない処理もついてくるので、削ってシンプルに。
これでF5キーをタッチすれば、ピボットテーブルのデータ更新がされたうえで、PDFファイルが保存されます。
ちょっとでも手数を減らしてみる
Excelを使うと計算や集計もすぐにできて便利なのですが、触っているとどれだけ手を動かしているかにも気づきます。
今回の場合は、前述したようにデータの入力だけでなく、ピボットテーブルの更新処理、上書き保存、ファイルを閉じるなどなどあるわけです。
たまにしか使わないのでいいといえばいいのですが、ちょっとでも手数を減らせないかと気づいたならやってみるのがおすすめです。
それによって、Excelでどんなことができるか?にも気づけますし、つくったしくみをどう使いやすくするか?などこだわりも出せます。
今回の場合だと、税務署のしくみがつかいにくいので、「このままでは…」としくみづくりをすることに。
やり方は1つじゃないとするならば、Excelを使ってこだわってみるのも手です。
ということで、しくみに需要があるかはともかく、参考になればうれしいです。
【編集後記】
昨日は午前中に相続など税理士業を。
午後にカフェに行ってExcelでしくみづくり。
長男が血液検査をしたときに血液型がわかり、
我が家は全員血液型が違うことが発覚。
まぁ、血液型の4パターンで
分けられるものでもないでしょうけど、
バラバラなのが興味深かったです。
【昨日の1日1新】
※「1日1新」→詳細はコチラ
もっちり珈琲ゼリー