【時短120%】Excelピボットテーブル作成・更新をVBAで自動化!初心者でもコピペで毎日10分の時間を生み出す方法

【業務効率化】VBA
スポンサーリンク

  • 「はぁ……また今日もこの作業か……」
  • 「どこに何をいれればいいんだっけ?」

こんなふうに思ったことはありませんか?

でも、VBA(マクロ)を使えば、その作業は「1秒」で終わらせることができます。

毎日10分以上かけていた作業が、ボタンひとつで完了。年間で考えれば、なんと約40時間(5営業日分相当)もの貴重な時間を節約できる計算になります。

今回は、プログラミング初心者の方でも「コピペ」で今すぐ使える、ピボットテーブルの作成・更新コードを解説します。

【業務効率化】VBAの記事を見る 

ピボットテーブルをVBAで操る「2つのステップ」

難しい用語は抜きにして、ピボットテーブルをVBAで作る仕組みを「お料理」に例えて説明します。

  1. 材料の準備(ピボットキャッシュ) 冷蔵庫から食材(データ)を出して、まな板の上に並べる作業です。
  2. 調理(ピボットテーブル) まな板の上の食材を、お皿(シート)に盛り付ける作業です。

VBAでは、この「データの塊(キャッシュ)」をまず作ってから、それを「表(テーブル)」として表示させるという2段階で命令を出します。

【コピペOK】自動作成・更新のVBAコード

以下のコードは、データが増えても自動で範囲を調整してくれる「魔法のコード」です。

Sub AutoPivotTable()
    ' --- 変数の定義(使う道具の名前を決める) ---
    Dim wsData As Worksheet    ' 元データが入っているシート
    Dim wsPivot As Worksheet   ' ピボットを作る先のシート
    Dim pc As PivotCache       ' データの記憶場所
    Dim pt As PivotTable       ' ピボットテーブル本体
    Dim lastRow As Long        ' データの最終行

    ' 1. シートの設定(ご自身のシート名に変えてください)
    Set wsData = ThisWorkbook.Worksheets("データ")
   
    ' もし「集計」シートがすでにある場合は、一旦消して新しく作ります
    On Error Resume Next
    Application.DisplayAlerts = False
    Worksheets("集計").Delete
    Application.DisplayAlerts = True
    On Error GoTo 0
    Set wsPivot = Worksheets.Add
    wsPivot.Name = "集計"

    ' 2. データの最終行を自動で見つける
    lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row

    ' 3. ピボットキャッシュの作成
    ' SourceDataには「データ」シートのA1から右下の端っこまでを指定
    Set pc = ThisWorkbook.PivotCaches.Create( _
        SourceType:=xlDatabase, _
        SourceData:=wsData.Name & "!R1C1:R" & lastRow & "C5") ' C5はE列という意味

    ' 4. ピボットテーブルの作成
    Set pt = pc.CreatePivotTable( _
        TableDestination:=wsPivot.Name & "!R3C1", _
        TableName:="売上集計表")

    ' 5. フィールドの設定(どの項目を縦・横・値にするか決める)
    With pt
        ' 行(縦軸)に「担当者」を入れる
        .PivotFields("担当者").Orientation = xlRowField
        ' 値に「売上金額」を入れて、合計を計算する
        With .PivotFields("売上金額")
            .Orientation = xlDataField
            .Function = xlSum
            .NumberFormat = "#,##0" ' カンマ区切りで見やすくする
        End With
    End With

    MsgBox "ピボットテーブルの作成が完了しました!"
End Sub

このコードのポイント

  • 「最終行」を自動で判別 Cells(Rows.Count, “A”).End(xlUp) という命令を使うことで、データが100行であっても1万行であっても、VBAが自動的に末尾を検索してくれます。そのため、データが増えたからといって毎回手動で範囲を修正する手間がなくなります
  • 「上書き」によるミスの防止マクロを実行するたびに、一度古い集計シートを削除して新規に作り直す設定にしています。これにより、「過去の古いデータが一部残ってしまい、計算が合わなくなる」といったトラブルを未然に防ぎ、正確な結果を得ることができます

【業務効率化】VBAの記事を見る 


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でしたが、年間100万円以上節約していました。
株式投資で年間360万円以上投資し、iDeCoも併用しています。
総資産はアッパーマス層に到達しました。
資格は日商簿記3級を持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、生産性を高めるITスキルについて発信しています。

生活を豊かにするため、高配当株投資で年間配当金60万円をめざしています。
現在の年間配当金は30万円ほどです。

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました