ChatGPTでマクロを書く方法|Excel VBAをAIで自動作成して業務効率化する手順を解説

Excel

毎月の売上集計やデータ転記を手作業で繰り返していると、「この操作をボタン1つで終わらせたい」と感じる場面があります。Excel VBAなら定型作業をマクロとして自動化できますが、初心者にとって難しいのがコードを書く作業です。

ChatGPTを使えば、「どのシートの、どの列を、どの条件で処理するか」を日本語で伝え、VBAコードのたたき台を作成できます。ただし、生成されたコードをそのまま本番ファイルへ適用するのではなく、シート名やセル参照を確認し、コピーしたテストファイルで動作を検証することが欠かせません。

ここでは、部署別の売上を自動集計するマクロを実際の例にして、ChatGPTへの指示、VBAコードの確認、Excelへの貼り付け、実行、エラー修正まで順番に解説します。

ChatGPTでマクロを書く流れは6ステップ

ChatGPTでExcelマクロを作る場合、最初から複雑なVBAを完成させようとするより、次の流れで1つずつ確認したほうが安全です。

  1. 自動化したい作業を1つ決める
  2. シート名・列・条件・結果を整理する
  3. ChatGPTへVBA作成を依頼する
  4. 生成されたコードと自分のExcelを照合する
  5. Excelの標準モジュールへ貼り付ける
  6. コピーしたファイルで実行結果を確認する

ChatGPTはコーディングにも利用できますが、AIが実際のブック構成を把握しているとは限りません。シート名、列、開始行、終了条件などを人が正確に伝えることが、使えるマクロへ近づけるポイントです。ChatGPT自体の基本操作に慣れていない場合は、ChatGPTの使い方完全ガイドから確認すると進めやすくなります。

実践例:部署別の売上を自動集計するマクロを作る

今回は、「売上データ」シートに入力された明細を読み取り、「集計」シートに部署別の売上合計を表示するマクロを作ります。

関数だけでも処理できる内容ですが、マクロ化することで、毎回同じ集計処理を実行する流れを作れます。VBAで自動化できる業務の全体像を先に確認したい場合は、ChatGPTでVBAを作る方法も参考にしてください。

売上データシートを準備する

「売上データ」シートを次の構成にします。

A列:日付B列:部署C列:担当者D列:売上金額
22026/8/1営業1課田中120000
32026/8/1営業2課佐藤80000
42026/8/2営業1課鈴木150000
52026/8/2営業3課高橋60000
62026/8/3営業2課伊藤90000

集計シートを準備する

次に「集計」シートのA列へ、集計対象の部署名を入力します。

セル入力内容マクロ実行後のB列
A1部署売上合計
A2営業1課270000
A3営業2課170000
A4営業3課60000

このように、ChatGPTへ依頼する前に「元データ」と「完成後の状態」を決めておくと、VBAの条件を具体的に伝えられます。

ChatGPTへVBA作成を依頼するプロンプト

「売上を集計するマクロを書いて」だけでは、ChatGPTは対象シートや列を判断できません。少なくとも「シート名」「列の役割」「開始行」「出力先」「終了条件」を伝えます。

Excel VBAマクロを作成してください。

「売上データ」シートは1行目が見出しで、A列が日付、B列が部署、C列が担当者、D列が売上金額です。

「集計」シートではA2以降に集計対象の部署名を入力しています。

売上データのB列を部署条件として、D列の売上金額を合計し、集計シートのB列へ表示してください。

データ行数と部署数は毎回変わるため、最終行を自動取得してください。

シート名が見つからないなどのエラーが発生した場合は、エラー番号と内容をメッセージで表示してください。

初心者でも確認できるよう、変数名を分かりやすくし、Option Explicitを付けてください。

実際の表をAIへ渡す必要がない場合は、この例のように列構成だけを説明できます。顧客名、社員情報、取引先情報、未公開の売上などを入力する場合は、会社のAI利用ルールを確認し、必要に応じて架空のサンプルデータへ置き換えてください。

「何を自動化したいか」だけでなく、「どこから読み、どこへ書き、どこまで処理するか」を伝えると、セル参照のずれを減らしやすくなります。

コピーして確認できるVBA完成例

上記の条件に対応するVBAの一例は次のとおりです。構文とセル参照の関係を確認したサンプルですが、実際のExcel上で実行済みとするものではありません。まずコピーしたテスト用ブックで確認してください。

Option Explicit

Sub 部署別売上集計()

    Dim wsSrc As Worksheet
    Dim wsSum As Worksheet
    Dim lastRow As Long
    Dim lastDeptRow As Long
    Dim i As Long

    On Error GoTo ErrHandler

    Set wsSrc = ThisWorkbook.Worksheets("売上データ")
    Set wsSum = ThisWorkbook.Worksheets("集計")

    lastRow = wsSrc.Cells(wsSrc.Rows.Count, "B").End(xlUp).Row
    lastDeptRow = wsSum.Cells(wsSum.Rows.Count, "A").End(xlUp).Row

    If lastRow < 2 Or lastDeptRow < 2 Then
        MsgBox "集計対象データまたは部署名がありません。", vbExclamation
        Exit Sub
    End If

    wsSum.Range("B2:B" & lastDeptRow).ClearContents
    wsSum.Cells(1, "B").Value = "売上合計"

    For i = 2 To lastDeptRow
        wsSum.Cells(i, "B").Value = Application.WorksheetFunction.SumIf( _
            wsSrc.Range("B2:B" & lastRow), _
            wsSum.Cells(i, "A").Value, _
            wsSrc.Range("D2:D" & lastRow))
    Next i

    wsSum.Range("B2:B" & lastDeptRow).NumberFormatLocal = "#,##0"

    MsgBox "部署別売上の集計が完了しました。", vbInformation
    Exit Sub

ErrHandler:
    MsgBox "エラーが発生しました: " & Err.Number & vbCrLf & Err.Description, vbCritical

End Sub

このコードが行っている処理

コードを丸ごと覚える必要はありません。初心者は、どの部分が自分のExcelに依存するのかを確認できれば、修正しやすくなります。

コード役割変更が必要になる場面
Worksheets(“売上データ”)元データのシートを指定実際のシート名が異なる場合
Worksheets(“集計”)結果を表示するシートを指定集計先のシート名が異なる場合
“B”部署が入力されている列部署列がB列以外の場合
“D”売上金額が入力されている列金額列がD列以外の場合
A2以降集計する部署名の一覧部署一覧を別の列に置く場合

最終行を固定しない理由

売上データが毎月増減する場合、「B2:B100」のように固定すると101行目以降が処理されません。この例ではB列の最後に値が入っている行を取得し、その行までを集計対象にしています。

Excel VBAではRangeやCellsを使ってセルや範囲を指定できます。より複雑なコードを作る場合も、まず「どのワークシートの、どのセル範囲を参照しているか」を追うことが基本になります。

生成したVBAをExcelへ貼り付ける

ChatGPTがコードを作成しても、そのままChatGPT上から通常のExcel VBAとして実行するわけではありません。コードをExcelのVBAエディターへ貼り付けます。

Excel for the webではVBAマクロを作成、編集、実行できないため、この手順ではデスクトップ版Excelを使用します。Microsoft公式の説明はExcel for the webでのVBAマクロの扱いから確認できます。

開発タブを表示する

Windows版Excelで「開発」タブが表示されていない場合は、次の順で有効にします。

  1. 「ファイル」を開く
  2. 「オプション」を開く
  3. 「リボンのユーザー設定」を選ぶ
  4. メインタブの「開発」にチェックを入れる
  5. 「OK」を選択する

標準モジュールへコードを貼り付ける

  1. 「開発」タブを開く
  2. 「Visual Basic」を選択する
  3. VBAエディターで対象ブックを選ぶ
  4. 「挿入」から「標準モジュール」を追加する
  5. 表示されたコード画面へChatGPTのVBAを貼り付ける

Windows版ではAltキーとF11キーからVisual Basic Editorを開く方法もあります。画面構成はExcelのバージョンやOSによって異なる場合があります。

マクロ有効ブックとして保存する

VBAを保存するブックは、通常の.xlsxではなく「Excelマクロ有効ブック」の.xlsm形式で保存します。Microsoftのマクロを保存する公式手順でも、VBAを保持する場合は.xlsm形式が案内されています。

コードを書いた後に.xlsx形式で保存すると、VBAを保持できません。マクロを残したいブックは保存形式まで確認してください。

マクロを実行する前にコピーを作る

VBAはセルの変更、行の削除、ファイル保存などを自動実行できます。処理内容によっては、通常の「元に戻す」操作を前提にできません。そのため、本番ファイルへ最初から実行せず、元ファイルを複製してテストする方法が安全です。

今回の例なら、次の3点を確認します。

  • 元の「売上データ」シートが意図せず変更されていない
  • 「集計」シートのB2からB4へ正しい合計が表示される
  • 行を追加してから再実行しても新しいデータが集計される

期待される結果を照合する

サンプルデータで正しく動作した場合、集計結果は営業1課が270,000、営業2課が170,000、営業3課が60,000になります。

確認項目期待する結果
営業1課120000 + 150000 = 270000
営業2課80000 + 90000 = 170000
営業3課60000

「マクロが最後まで動いた」だけでは確認として不十分です。元データを手計算した結果と、マクロの結果が一致するところまで確認します。

数式による自動化で十分なケースもあります。VBAを使う前に関数で処理できないか確認したい場合は、ChatGPTでExcel関数を作る方法も参考になります。

ChatGPTが作ったマクロを確認する5項目

AIが自然な説明と一緒にコードを返しても、そのコードが自分のExcelに合っているとは限りません。実務では次の5項目を確認します。

確認項目見る場所
シート名実際のブックと完全に一致しているか
列・セル参照A列、B列などの位置が実データと一致しているか
開始行見出しをデータとして処理していないか
終了条件最終行や最終列を正しく取得できるか
変更処理Delete、Clear、Saveなど意図しない変更がないか

特に削除、上書き、ファイル移動、メール送信を含むマクロは、処理内容を理解できないまま実行しないようにします。

Microsoftも、内容と目的を理解していないマクロを安易に有効化しないよう案内しています。マクロのセキュリティ設定についてはMicrosoftのマクロ有効化・無効化に関する案内を確認してください。

エラーが出たらChatGPTへ何を伝えるか

マクロが動かなかった場合、「動きません」とだけ入力するより、エラー情報とExcelの構成をセットで伝えます。

次のExcel VBAでエラーが発生しました。

エラー番号:9

エラーメッセージ:インデックスが有効範囲にありません。

実際のシート名は「売上データ」と「集計」です。

エラーになる行を特定し、原因と修正版コードを初心者向けに説明してください。

既存データを削除する処理は追加しないでください。

実行時エラー9が出る

今回のようなコードで実行時エラー9が発生した場合は、最初にシート名を確認します。「売上データ」と「売上 データ」のようなスペースの違いでも別名になります。

マクロ一覧に表示されない

コードを標準モジュールではなく別の場所へ貼り付けていないか、Subプロシージャに引数が設定されていないかなどを確認します。初心者が通常のマクロとして実行するコードは、まず標準モジュールへ置く方法が分かりやすいです。

マクロが無効になっている

ファイルを開いたときにマクロが無効化されている場合があります。ただし、警告が表示されたからという理由だけで、出所や処理内容を確認せず有効にするのは避けます。会社のパソコンでは管理者によって設定が制御されている場合もあります。

結果は出るが数値が違う

最も注意したいのが、エラーを表示せず最後まで動くのに結果だけが間違っているケースです。部署列や金額列の指定、見出し行、最終行、集計条件を確認してください。

ChatGPTへ修正を依頼するときも、「期待値は270000なのに240000になる」のように正しい結果を伝えると原因を絞り込みやすくなります。

「エラーが出ない=正しいマクロ」ではありません。正常系だけでなく、空白、0件、追加行、想定外の値でも結果を確認すると不具合を見つけやすくなります。

ChatGPTへ修正を頼むときはコード全体を作り直させない

小さな不具合のたびに「全部書き直してください」と依頼すると、直っていた部分まで変更されることがあります。修正箇所を限定して依頼する方法が扱いやすいです。

現在のVBAでは売上集計まで正常に動作しています。

既存の集計処理は変更せず、集計完了後にB列を3桁区切りで表示する処理だけ追加してください。

変更した行と追加した行を説明してください。

このように「変更してよい範囲」と「変更してはいけない範囲」を指定すると、修正内容を比較しやすくなります。

VBAを使うべき作業と関数で十分な作業を分ける

Excelの効率化に、すべてVBAが必要なわけではありません。処理内容によっては関数、テーブル、ピボットテーブルなどのほうが管理しやすいことがあります。

作業最初に検討する方法
セル内の条件分岐IF関数など
条件付き集計SUMIFS、COUNTIFSなど
商品コードから情報取得XLOOKUPなど
複数の操作を順番に繰り返すVBAマクロ
複数シートやファイルを処理するVBA、Power Queryなどを比較
ボタンから決められた処理を実行するVBAマクロ

Excelの自動化方法をVBAだけに限定せず比較したい場合は、Excel業務を自動化する方法も確認してください。

ChatGPTとVBAを実務で使うときの注意点

本番データを最初のテストに使わない

生成されたコードは、自分のブック構成に合っていない可能性があります。元ファイルを複製し、少量のサンプルデータで結果を確認してから対象を広げます。

機密情報をそのままChatGPTへ貼り付けない

会社で利用する場合は、社内規程と利用しているChatGPT環境のデータ取り扱い条件を確認します。VBA作成に本物の顧客名や社員情報が不要なら、「顧客A」「社員001」などの架空データへ置き換えて依頼できます。

削除・上書き処理は特に確認する

Delete、Clear、ClearContents、Save、SaveAs、Killなど、データやファイルを変更する処理が含まれている場合は、どの対象へ作用するコードなのか確認してください。

担当者しか分からないマクロにしない

業務で継続利用するなら、対象シート、入力列、実行方法、期待結果、エラー時の対応を短い手順書として残します。ChatGPTにはコード作成だけでなく、完成したVBAから運用マニュアルのたたき台を作らせることもできます。

よくある質問

ChatGPTにExcelファイルを渡さなくてもマクロは作れますか?

作れます。シート名、列名、サンプルデータ、実行したい処理、出力先を文章で説明できます。実ファイルを渡す必要がない場合は、必要な構造だけを伝える方法が安全です。

VBAをまったく知らなくても使えますか?

コード作成自体は依頼できますが、シート名、セル参照、変更対象、実行結果を確認する最低限の知識は必要です。最初は10〜30行程度の小さなマクロから試すと確認しやすくなります。

Excelのブラウザ版でVBAマクロを実行できますか?

Excel for the webではVBAマクロを作成、編集、実行できません。VBAを扱う場合はデスクトップ版Excelを使用します。

ChatGPTが作ったVBAをそのまま会社で使ってもよいですか?

そのまま本番利用するのではなく、会社のAI利用ルールとマクロ利用ルールを確認し、テストデータで検証してください。特にデータ削除、ファイル操作、外部送信を伴う処理は慎重な確認が必要です。

マクロを保存したのに消えてしまうのはなぜですか?

.xlsx形式で保存している可能性があります。VBAコードをブック内に残す場合は、Excelマクロ有効ブックの.xlsm形式を選択してください。

ChatGPTにエラー修正を依頼するとき、何を送ればよいですか?

エラー番号、エラーメッセージ、エラーが発生する行、実際のシート名や列、期待する結果を伝えます。個人情報や社外秘が含まれる場合は、その部分を匿名化してください。

関連記事

まとめ

  • ChatGPTには、シート名・列・処理条件・出力先まで具体的に伝える
  • 生成されたVBAは、実際のExcelのシート名とセル参照を照合する
  • 最初から本番データで実行せず、コピーしたブックとサンプルデータで検証する
  • マクロを保持するブックは.xlsm形式で保存する
  • エラーが出ない場合も、期待値と実際の結果が一致するか人が確認する

ChatGPTを使うと、VBAの構文をゼロから考える負担を減らせます。一方で、自動化する業務の条件を決め、生成されたコードが正しく処理しているか確認する役割は人に残ります。

最初は、毎日または毎月繰り返している小さなExcel作業を1つ選び、「入力データ」「処理内容」「完成結果」を整理してChatGPTへ伝えてみてください。1本のマクロを安全に完成させる経験を積むと、転記、集計、帳票作成など、より実務的な自動化へ段階的に広げやすくなります。

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