Excelマクロ入門 ピボットテーブルの更新を忘れないためのマクロ

  • URLをコピーしました!

Excelで集計するときにピボットテーブルを使うと便利です。

ただ、対象のデータの追加や修正があると、その都度、ピボットテーブルの更新をしなければ集計に反映することはできません。
その更新を手作業からマクロで自動化しておくとささやかな手数でも減らすことができます。

目次

ピボットテーブルは別途更新が必要

Excelでデータを集計したいとき、よく使うのはピボットテーブルという機能です。

並べたデータがあれば、

このように集計することもできますし、

集計の並び替えもカスタマイズできます。

SUM関数やSUMIF関数などで集計することもできなくはありませんが、うまくいかなかったり、関数が長すぎたりしても、かえってわかりにくもなりますので、ピボットテーブルを使うようにしています。


ここで、同じテーブルからピボットテーブルを2つ作って集計しているようなときがあるとして、

たとえば、ピボットテーブルで集計したい元のデータに追加があると、

その都度、ピボットテーブルの更新をしないと、

それを反映した集計にはなりません。

このテーブルのデータを更新(追加や修正)するところを手でやろうとすると、更新をし忘れたりして古いデータのまま集計してしまう可能性もあります。

でそれをなんとかしようとすると、自動化、つまりマクロに頼ることになります。

ピボットテーブルの更新をマクロで自動化

ピボットテーブルを更新するマクロを書くとこのようになります。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    ' Sh     :変更されたシート
    ' Target :変更されたセル範囲

    '更新された対象が「データ」以外なら何もしない
    If Sh.Name <> "データ" Then Exit Sub
    
    Application.EnableEvents = False
    Worksheets("PIVOT1").PivotTables(1).RefreshTable
    Worksheets("PIVOT2").PivotTables(1).RefreshTable
    Application.EnableEvents = True

End Sub

「Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)」とあるのは、
・どのシートで(ByVal Sh As Object)、
・どのセルの範囲で(ByVal Target As Range)
追加(修正)があったのかを伝えることを意味します。

「If Sh.Name <> “データ” Then Exit Sub」とあるのは、「データ」シートで追加や修正があったらこのマクロを動かすという意味。つまり、データ以外のシートで変更があってもマクロは動かさないから安心しても良いという意味です。

「Application.EnableEvents = False~Application.EnableEvents = True」とあるのは、ピボットテーブルが更新されるけど、これはデータの更新とはカウントしないでね、といった意味。これで無限にループしてしまう可能性をリセットします。

そして、今回のケースでは、ピボットテーブルは2つ。PIVOT1と、

PIVOT2(↓)です。

「Worksheets(“PIVOT1”).PivotTables(1).RefreshTable」で、1つ目のピボットテーブル(PIVOT1シート)を更新。

同様に「Worksheets(“PIVOT2”).PivotTables(1).RefreshTable」でPIVOT2シートを更新します。

ChatGPTに聞いてみると、「”ピボットテーブルの更新が完了しました!”」などのわずらわしい表示もあるので、そこは削ってシンプルにしています。

今回のサンプルはこちらありますのでご参考までに。
Sample_ピボットテーブルを更新するマクロ

ちなみに、{マクロはボタンを押して実行させたい」という慎重派のタイプということなら、
Alt + F11で標準モジュールを開き、このように書いて

Sub ピボット更新()

    Application.ScreenUpdating = False
    Application.EnableEvents = False

    ' PIVOT1 更新
    Worksheets("PIVOT1").PivotTables(1).RefreshTable

    ' PIVOT2 更新
    Worksheets("PIVOT2").PivotTables(1).RefreshTable

    Application.EnableEvents = True
    Application.ScreenUpdating = True


End Sub

マクロの登録ボタンでこれを選択すると、

このように、「ボタンを押す」ワンクッションを入れることもできます。

少ない手数でも「減らせないか?」を考える

Excelを使う計算や集計は、関数でもできますし、関数を使わずにピボットテーブルのような便利なものもあります。

ただ、使っていくうちに、実際には、「毎回、手を動かして操作しているなぁ」という気づきもあります。

たまにしかやらない操作であれば、まだ手動のままでもいいのかもしれませんが、それなりに触る回数があるのであれば、気づいたときに、自動化の仕組みをつくっておくのは、やはりおすすめです。鉄は熱いうちに…とも言います。

気づいているときが、アンテナの感度が最高潮のタイミングとも言えますから、そのときに「どうやったらもっと便利に使えそうか?」と、こだわることもできます。時間はかかりますけどね..。

今回の場合だと、毎月の経理で触る部分ではあるのですが、ちょこっとでもあるので、手動でできなくはありません。ただ、それが今後続くとなるとモヤモヤもしますので。いっそのことということで。

もちろん、やり方は1つとは限りません。

Excelを開くと、まず真っ白なシートが開きます。
真っ白=自由、仕組みのつくり方は1つではありません。マクロの書き方も同様に。

ということで、参考になればうれしいです。

ちなみに、今回使っている「テーブル」についてはこちらを

ピボットテーブルの並び順、集計についてはこちらを

マクロをボタンで動かす方法については、こちらもあわせて参考にしてみていただければ。


■編集後記
昨日は朝のタスク、研究開発など。
午後はオフ、
息子と一緒に青鬼オンライン、
Youtube動画を眺めつつ読書など

■昨日の1日1新
・MacアプリAlfred
・Macでとある設定など

■息子(11歳)
Youtube動画を見ているときは集中力がすごいです。
ゲームは怖がりな性分なはずなのですが、なぜか怖い系が好きなようで…。
ちなみに得意ゲームは青鬼、Garden of BanBanらしいです


この記事が気に入ったら
いいね または フォローしてね!

  • URLをコピーしました!
目次