ChatGPTでVBAを作る方法|Excel業務を自動化して作業時間を大幅削減する活用術

Excel

毎月の集計や転記をExcelで何度も繰り返していると、「この作業をボタン1つで終わらせたい」と感じることがあります。VBAを使えば、データの転記、集計、ファイル操作、帳票作成などを自動化できますが、初心者にとって難しいのはコードをゼロから書く部分です。そこで活用できるのがChatGPTです。やりたい処理、シート名、列構成、実行条件を日本語で整理して伝えると、VBAコードのたたき台を作成できます。ただし、生成されたコードを本番ファイルへそのまま貼り付けるのは避け、コピーしたブックとテストデータで結果を確認することが大切です。ここでは、実務を想定したサンプルを使い、依頼文の作り方からExcelへの貼り付け、動作確認、エラー修正まで順番に解説します。

確認時点は2026年8月10日です。Excelの画面やセキュリティ設定は、バージョンや組織の管理設定によって表示が異なる場合があります。

最初に作るVBA|「完了」のデータだけを集計シートへ転記する

最初から複雑な自動化を作るより、入力と結果を確認しやすい小さな処理から始めると失敗を見つけやすくなります。

今回は「売上」シートから状態が「完了」の行だけを「集計」シートへ転記するVBAを例にします。

A列:受注日B列:担当者C列:商品D列:売上E列:状態
22026/8/1田中商品A120000完了
32026/8/2佐藤商品B85000未完了
42026/8/3鈴木商品C150000完了
52026/8/4田中商品B98000確認中
62026/8/5佐藤商品A110000完了

このサンプルでは、2行目、4行目、6行目の3件だけが「集計」シートへ転記されれば想定どおりです。

構文を確認したサンプルコードは次のとおりです。実際のブックへ適用する前に、コピーしたファイルでシート名と結果を確認してください。

Option Explicit

Sub 完了案件を集計()

    Dim wsSrc As Worksheet
    Dim wsDst As Worksheet
    Dim lastRow As Long
    Dim lastDstRow As Long
    Dim srcRow As Long
    Dim dstRow As Long

    On Error GoTo ErrHandler

    Set wsSrc = ThisWorkbook.Worksheets("売上")
    Set wsDst = ThisWorkbook.Worksheets("集計")

    lastRow = wsSrc.Cells(wsSrc.Rows.Count, "A").End(xlUp).Row
    lastDstRow = wsDst.Cells(wsDst.Rows.Count, "A").End(xlUp).Row

    If lastDstRow >= 2 Then
        wsDst.Range("A2:E" & lastDstRow).ClearContents
    End If

    wsDst.Range("A1:E1").Value = wsSrc.Range("A1:E1").Value
    dstRow = 2

    For srcRow = 2 To lastRow

        If wsSrc.Cells(srcRow, "E").Value = "完了" Then

            wsDst.Range("A" & dstRow & ":E" & dstRow).Value = _
                wsSrc.Range("A" & srcRow & ":E" & srcRow).Value

            dstRow = dstRow + 1

        End If

    Next srcRow

    MsgBox (dstRow - 2) & "件を集計シートへ転記しました。", vbInformation

    Exit Sub

ErrHandler:

    MsgBox "処理を中止しました。" & vbCrLf & _
           "エラー番号: " & Err.Number & vbCrLf & _
           "内容: " & Err.Description, vbExclamation

End Sub

このコードでは元の「売上」シートを削除したり書き換えたりせず、「集計」シートへ値を転記します。ただし、集計シートのA2:E列に既存データがある場合は内容を消してから転記するため、実務へ導入するときは削除範囲が正しいか確認してください。

Excel関数で解決できる処理までVBAにする必要はありません。単一セルの判定や検索、条件集計が目的なら、ChatGPTでExcel関数を作る方法も比較してから方法を選ぶと管理しやすくなります。

ChatGPTへ依頼するときは6つの情報を先に決める

ChatGPTへ「Excelを自動化するVBAを作って」とだけ依頼すると、AI側がシート名や列構成を補ってしまい、実際のブックと合わないコードになることがあります。

コードを書く前に、最低でも次の6点を整理します。

伝える情報今回の例
処理の目的完了案件だけを別シートへ転記する
元シート売上
出力先集計
列の構成A列~E列
判定条件E列が「完了」
既存データの扱い集計シートの2行目以降だけ消して再作成

特に重要なのが「削除」「上書き」「保存」の扱いです。VBAでは処理を自動化できる一方、指定を間違えると大量のセルやファイルを一度に変更することがあります。

ChatGPTへコードを頼む前に、「何を変更してよいか」と同時に「何を変更してはいけないか」も決めておくと、削除や上書きの範囲を確認しやすくなります。

そのまま使えるVBA作成プロンプト

今回のサンプルなら、ChatGPTへ次のように依頼できます。

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

【シート構成】
「売上」シート
A列:受注日
B列:担当者
C列:商品
D列:売上
E列:状態

1行目は見出しです。
データは2行目以降にあります。

出力先のシート名は「集計」です。

【やりたいこと】
1. 「売上」シートのE列を確認する
2. E列が「完了」の行だけを抽出する
3. A列からE列までの値を「集計」シートへ転記する
4. 実行前に「集計」シートの2行目以降の既存データを削除する
5. 1行目の見出しも転記する
6. 処理後に転記件数をメッセージで表示する

【条件】
・ThisWorkbookを使用する
・SelectとActivateはできるだけ使用しない
・Option Explicitを付ける
・エラーが発生した場合は処理を停止して内容を表示する
・元の「売上」シートのデータは変更しない
・セルの書式ではなく値だけを転記する
・初心者でも変更箇所が分かるようにコードの意味を説明する

実在しないシート名や列は追加しないでください。

「処理内容」だけでなく、「元データは変更しない」「値だけを転記する」などの制約も指定している点がポイントです。

一度で完成させることを狙う必要はありません。回答を確認し、「シート名だけ変える」「条件を追加する」「削除処理を外す」といった小さな修正を繰り返すほうが、どこが変わったのか追いやすくなります。

ChatGPT自体の基本的な入力方法や追加指示の出し方から確認したい場合は、ChatGPTの使い方完全ガイドも参考にしてください。

生成されたVBAをExcelへ貼り付ける手順

VBAマクロはデスクトップ版Excelで作成・編集・実行します。Microsoftの案内では、Excel for the webではVBAマクロを作成、実行、編集できません。Web版を利用している場合は、デスクトップアプリでブックを開いてください。

  1. 元のExcelファイルをコピーし、テスト用ファイルを作成する
  2. デスクトップ版Excelでテスト用ファイルを開く
  3. Windows版では「ファイル」→「オプション」→「リボンのユーザー設定」で「開発」にチェックを入れる
  4. 「開発」→「Visual Basic」を開く
  5. VBAエディターで対象ブックを選び、「挿入」→「標準モジュール」を選択する
  6. ChatGPTで作成したコードを標準モジュールへ貼り付ける
  7. マクロを保持する場合はExcelマクロ有効ブック「.xlsm」で保存する
  8. テストデータを使ってマクロを実行する
  9. 実行後の件数とセルの内容を期待値と照合する

「開発」タブの表示方法はMicrosoft公式の「開発タブを表示する」でも確認できます。

また、マクロを含むブックを通常の.xlsx形式で保存するとVBAコードを保存できません。マクロを残す場合は、Microsoft公式のマクロ保存手順を参考に、Excelマクロ有効ブック(.xlsm)を選択します。

サンプルコードが何をしているのか確認する

Option Explicitで変数の宣言漏れを見つけやすくする

Option Explicit

変数の宣言を求める指定です。変数名の入力ミスなどを見つける助けになるため、ChatGPTへVBAを作成させる場合も付けてもらうと確認しやすくなります。

処理するシートを名前で指定する

Set wsSrc = ThisWorkbook.Worksheets("売上")
Set wsDst = ThisWorkbook.Worksheets("集計")

「売上」と「集計」が、実際のブックに存在するシート名と完全に一致している必要があります。「売上 」のように余分な空白が入っている場合も別名になるため注意してください。

データの最終行を取得する

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

A列を基準に、下から上へデータのあるセルを探して最終行を取得しています。そのため、実務では「A列が常に入力される」という前提が正しいか確認します。

A列に空欄が発生し、別の列には必ず値が入る表なら、基準列を変更する必要があります。

「完了」の行だけを判定する

If wsSrc.Cells(srcRow, "E").Value = "完了" Then

E列の値が「完了」と完全一致した行だけを処理します。「処理完了」「完了済み」など別の文字列は対象になりません。

元データを書き換えず値だけを転記する

wsDst.Range("A" & dstRow & ":E" & dstRow).Value = _
    wsSrc.Range("A" & srcRow & ":E" & srcRow).Value

セルの値を出力先へ代入しています。Copyメソッドでセル全体をコピーする方法とは異なり、この例では元セルの書式や数式そのものを引き継ぐ目的にはしていません。

ChatGPTのVBAが動かないときはエラーだけを送らない

生成されたコードでエラーが発生した場合、「エラーになりました」だけでは原因を絞りにくくなります。

次の4点をまとめて伝えると修正しやすくなります。

  • 現在使用しているVBAコード
  • 表示されたエラー番号とメッセージ
  • エラーになった行
  • 本来どのような結果になるはずだったか

たとえば、シート名を間違えていた場合は次のように追加指示できます。

先ほどのVBAを実行するとエラーになります。

実際のシート名は
「売上」ではなく「売上データ」です。

それ以外の列構成と処理条件は変更しないでください。
変更した行が分かるように説明し、
コード全体を再提示してください。

結果は動いたかどうかだけでなく、「正しい3件が転記されたか」「元データが変わっていないか」「別の行が消えていないか」まで確認します。

ChatGPTでVBAを作るときに失敗しやすい6つのポイント

シート名をAIに推測させる

「売上表を集計して」のような依頼では、ChatGPTがSheet1などの仮のシート名を使うことがあります。実際の名前をそのまま指定してください。

最終行を固定値にする

「2行目から100行目まで」のように固定すると、データが101行目まで増えたときに処理されません。毎月行数が変わる表では、最終行を取得する処理が必要です。

削除範囲を確認せず実行する

Clear、ClearContents、Deleteなどが含まれているコードでは、対象シートと範囲を確認します。本番ブックではなくコピーしたファイルで最初にテストしてください。

マクロの警告を無条件で許可する

Microsoftは、内容を理解して信頼できるマクロだけを有効にするよう案内しています。マクロを実行するためにセキュリティ設定を一律で弱めるのではなく、コードの内容とファイルの入手元を確認してください。

マクロ設定の仕組みはMicrosoft公式のマクロセキュリティ設定で確認できます。

.xlsxのまま保存する

VBAを残したいブックは.xlsmなどVBAコードを保存できる形式が必要です。保存時に「マクロを保存できません」といった警告が表示された場合は、ファイル形式を確認してください。

エラーが出なければ正しいと思う

VBAはエラーなしで最後まで動いても、転記先、集計対象、削除範囲などが間違っている可能性があります。実行結果と期待値の比較までが確認作業です。

博士の注意点

「エラーなし」は「正しい結果」と同じではありません。件数、代表データ、0件の場合、最終行付近など複数パターンを確認してから本番へ移してください。

VBAを少しずつ拡張すると実務へ応用しやすい

最初のマクロが想定どおり動いたら、1機能ずつ追加します。

追加したい処理ChatGPTへの追加指示例
金額条件を追加D列が100000以上の行だけにしてください
日付条件を追加当月のデータだけを対象にしてください
並べ替え転記後に受注日の昇順で並べ替えてください
PDF出力集計シートを指定フォルダへPDF保存してください
ファイル処理指定フォルダの複数ブックから同じ列を集約してください

いきなり「集計してPDFを作り、Outlookでメールを送り、処理済みファイルを移動してください」と複数処理をまとめると、問題が起きたときに原因を探しにくくなります。

「転記だけ」→「条件追加」→「PDF保存」のように段階的に機能を増やすと、どの変更で問題が起きたのか判断しやすくなります。

Excelで利用できる自動化方法を広く比較したい場合は、Excel業務を自動化する方法もあわせて確認してください。

VBAに向いている作業とExcel関数に向いている作業を分ける

ChatGPTがコードを書けるからといって、すべてのExcel業務をVBAにする必要はありません。

やりたいこと候補
セル内で条件判定するIFなどのExcel関数
商品コードから情報を取得するXLOOKUPなどのExcel関数
条件に一致する金額を集計するSUMIFSなどのExcel関数
複数シートへ繰り返し転記するVBA
大量のファイルを順番に処理するVBA
帳票を作ってPDF保存するVBA

数式で十分に解決できる処理は、VBAより変更箇所を把握しやすい場合があります。一方、クリック、転記、保存など複数の操作を繰り返している業務はVBAの候補になります。

商品検索のような処理なら、ChatGPTでXLOOKUPを作る方法も参考になります。

Excel for the web中心ならOffice Scriptsも候補になる

Microsoftは、VBAマクロを主にデスクトップ向けの自動化、Office Scriptsをクラウドやクロスプラットフォームを意識した自動化として案内しています。

Excel for the webではVBAマクロを作成、編集、実行できないため、Web版を中心に利用する業務ではOffice Scriptsなど別の方法を検討する余地があります。

項目VBAOffice Scripts
主な利用場面デスクトップExcelクラウドを含むExcel自動化
既存資産古くから使われるマクロが多い新しい自動化を設計するときの候補
向いている判断既存VBAの修正やデスクトップ業務クラウド中心の運用を検討する場合

VBAとOffice Scriptsでは利用環境やAPIが異なるため、単純にコードを置き換えられるとは限りません。現在のExcel環境と社内運用を確認して選択してください。

業務データをChatGPTへ入力する前に確認する

VBA作成ではシート構成を具体的に伝えるほどコードを作りやすくなりますが、そのために実際の顧客名、社員名、メールアドレス、契約情報、社外秘データまで貼り付ける必要はありません。

  • 氏名は「顧客A」「社員001」などへ置き換える
  • 実際の売上金額が不要ならサンプル値へ変更する
  • メールアドレスや電話番号を削除する
  • 社内ファイルをアップロードできるか会社のルールを確認する
  • 必要な列名と処理条件だけを伝える

個人向けChatGPTでは、設定のData Controlsから「Improve the model for everyone」のオン・オフを変更できます。利用するプランによってデータの扱いが異なるため、業務利用では社内ルールとOpenAI公式のData Controlsを確認してください。

ChatGPTに任せる部分と人が確認する部分を分ける

ChatGPTへ任せやすい部分人が確認する部分
VBAのたたき台作成実際のシート名と列構成
コードの意味の説明業務ルールとの一致
エラー原因の候補整理実際のエラーと修正結果
追加機能のコード案削除・上書き・保存範囲
コードを読みやすく整理本番データで使用してよいか

ChatGPTは「何を書くか」を考える時間を減らすための補助として使えます。一方で、そのコードが自社のブックで正しい処理をするかどうかは、実際のExcel環境で確認する必要があります。

文章作成やExcel以外も含めてAIに任せやすい業務を整理したい場合は、ChatGPTで業務効率化する方法も参考にしてください。

よくある質問

VBAを知らなくてもChatGPTでマクロを作れますか?

コードのたたき台を作ることはできます。ただし、シート名、列、条件、削除範囲などを自分で確認できる程度の理解は必要です。最初は10~20行程度の小さな処理から試すと確認しやすくなります。

ChatGPTが作ったVBAをそのまま実行してもよいですか?

本番ファイルへそのまま実行するのは避けてください。元ファイルをコピーし、少量のテストデータで実行して、期待する結果と一致することを確認してから利用します。

Excel for the webでもVBAは使えますか?

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

ChatGPTへExcelファイルをアップロードしたほうがよいですか?

ファイルを渡さなくても、シート名、列名、サンプルデータ、処理条件を文章で伝えてVBAを相談できます。実際の業務ファイルを扱う場合は、会社の生成AI利用ルールや情報の機密性を確認してください。

VBAとExcel関数はどちらを使えばよいですか?

セル内の計算、検索、条件判定ならExcel関数で解決できることが多く、複数シートへの転記、ファイル操作、PDF保存など一連の操作を自動化したい場合はVBAが候補になります。

マクロが実行できない場合は何を確認すればよいですか?

ファイル形式、マクロのセキュリティ設定、会社の管理ポリシー、コードを保存した場所、シート名、エラー内容を順番に確認します。組織の設定でマクロ実行が制限されている場合は、管理者への確認が必要です。

関連記事

まとめ

  • ChatGPTへ目的、シート名、列構成、条件、出力先、削除や上書きのルールまで具体的に伝える
  • 生成されたVBAは本番ファイルへ直接実行せず、コピーしたブックとテストデータで確認する
  • エラーが出なくても、件数、転記内容、元データ、削除範囲が期待どおりか照合する
  • マクロを保存する場合は.xlsm形式やマクロのセキュリティ設定を確認する
  • 単純な計算や検索ならExcel関数、繰り返し操作やファイル処理ならVBAというように使い分ける

最初から大規模な自動化を目指す必要はありません。まずはコピーしたExcelファイルで「条件に合う行を別シートへ転記する」といった小さなVBAを作り、期待値と実行結果を比較してみてください。正常に動く範囲を確認しながら1機能ずつ追加すると、ChatGPTをVBA作成の補助として実務へ取り入れやすくなります。

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