Excel VBAを使えば作業を自動化できると聞いても、「構文を覚えるのが大変そう」「エラーが出たときに自分で直せる自信がない」と感じて、結局手作業のまま続けていませんか。
実はVBAのコードは、自分で1から書けなくても構いません。ChatGPTに「何をしたいか」を日本語で伝えるだけで、コードの土台を作ってもらえます。エラーが出たときも、そのエラーメッセージをそのまま貼り付ければ、原因を調べて修正案を提示してもらえます。
この記事では、ChatGPTにVBAコードを書かせて業務を自動化するための指示の出し方と、うまく動かないときの直し方を解説します。前回の「複数シートのデータを1つにまとめるVBAマクロの作り方」で紹介したお題を例に、実際のやり取りの流れを見ていきます。この記事だけを読んでも理解できる内容です。
このやり方でできること
- 構文を覚える必要がない:やりたいことを日本語で伝えれば、ChatGPTがコードの土台を作ってくれる
- エラーが出ても自力で解決できる:エラーメッセージをそのまま貼り付けるだけで、原因の特定と修正案の提示までしてもらえる
- コードの中身も理解できる:1から書けなくても、Excel VBA初心者がまず覚えるべき基本構文まとめ程度の前提知識があれば、生成されたコードが「何をしているか」の見当がつき、安心して使える
全体の流れ(指示の出し方の考え方)
ChatGPTにコードを書いてもらうときは、次の4ステップを意識すると、欲しい動きに早くたどり着けます。
- やりたいことを具体的に伝える(例:「複数シートのデータを1つのシートにまとめたい」)
- 対象のシート構成を伝える(シート名、列構成、見出し行の有無など)
- 生成されたコードを実行してみる
- エラーや期待と違う結果が出たら、その内容をそのまま伝えて直してもらう
全体の流れ(イメージ)

一度の指示で完成形を求めるのではなく、「実行してみる→伝える→直してもらう」のループを何回か回すつもりで進めるのがポイントです。書けないからと諦める必要はなく、対話を重ねるほど求めている動きに近づいていきます。
実際にChatGPTへ指示を出してみる
ここでは、前回の「複数シートのデータを1つにまとめるVBAマクロの作り方」で紹介した「拠点別に分かれた複数シートのデータを1つの集計シートにまとめたい」というお題を例に、実際のやり取りの流れを見ていきます。
最初の指示(プロンプト例)
Excelマクロ(VBA)を作ってください。
やりたいこと:
・ブック内の複数のシート(拠点別に分かれている)のデータを、
「集計」という1つのシートにまとめたい
・各シートは1行目が見出し行、2行目以降がデータ
・シートの数は今後増えたり減ったりする可能性があるので、
シートが増減してもコードの書き直しが不要な作りにしてほしい
・「集計」シートが存在しない場合は自動で作成してほしい
・見出し行は最初の1回だけコピーし、重複しないようにしてほしい
このように「対象」「前提となるデータの形」「増減への対応」「例外時の挙動」まで具体的に伝えるほど、手直しの少ないコードが返ってきます。
ChatGPTが返してきたコード
Sub データを集計()
Dim ws As Worksheet
Dim wsSummary As Worksheet
Dim lastRow As Long
Dim lastCol As Long
Dim pasteRow As Long
Dim headerCopied As Boolean
Application.ScreenUpdating = False
'「集計」シートを取得。なければ作成
On Error Resume Next
Set wsSummary = ThisWorkbook.Worksheets("集計")
On Error GoTo 0
If wsSummary Is Nothing Then
Set wsSummary = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
wsSummary.Name = "集計"
End If
'既存の集計データをクリア
wsSummary.Cells.Clear
headerCopied = False
'ブック内の全シートを順番に処理
For Each ws In ThisWorkbook.Worksheets
'「集計」シート自身は対象外
If ws.Name <> "集計" Then
'最終行・最終列を取得
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
'データが存在する場合
If lastRow >= 2 And lastCol >= 1 Then
'最初のシートだけ見出しをコピー
If headerCopied = False Then
wsSummary.Cells(1, 1).Resize(1, lastCol).Value = _
ws.Cells(1, 1).Resize(1, lastCol).Value
headerCopied = True
End If
'集計シートの貼り付け開始行
pasteRow = wsSummary.Cells(wsSummary.Rows.Count, 1).End(xlUp).Row + 1
'データ部分だけコピー
wsSummary.Cells(pasteRow, 1).Resize(lastRow - 1, lastCol).Value = _
ws.Cells(2, 1).Resize(lastRow - 1, lastCol).Value
End If
End If
Next ws
Application.ScreenUpdating = True
MsgBox "集計が完了しました。", vbInformation
End Sub
このコードを実際に動かす手順
ChatGPTが返してきたコードは、コピーしただけでは動きません。手元のExcelに次の手順で組み込みます。
- 対象のExcelファイルを開き、「開発」タブ→「Visual Basic」でVBE(VBAの編集画面)を開く
- プロジェクトツリーで対象のブックを右クリック→「挿入」→「標準モジュール」を追加し、上のコードをそのまま貼り付ける
- コード内にカーソルを置き、F5キー(またはVBE上部の▶実行ボタン)でマクロを実行する
- 保存するときは「名前を付けて保存」でファイルの種類を「Excel マクロ有効ブック(.xlsm)」に変更する(通常の.xlsx形式のままだとコードごと消えてしまいます)

「開発」タブの表示方法や保存時の注意点は、Excel VBA初心者がまず覚えるべき基本構文まとめの「VBAを書く前の準備」で詳しく解説しているので、初めての場合はあわせて確認してください。
実行結果

プロンプト・生成コード・実行結果画像はすべて、実際にChatGPTとやり取りしてテスト用ダミーデータ(架空の支店名・商品名)で動かして得たものです。
指示した通り、複数シートのデータが「集計」シートにまとめられました。
コードを読んでみる
自分で書かなくても、Excel VBA初心者がまず覚えるべき基本構文まとめで紹介した基本構文が分かっていると、生成されたコードが何をしているかの見当がつきます。
For Each ws In ThisWorkbook.Worksheets
ブック内の全シートを1枚ずつ順番に処理する、基本構文まとめで紹介した繰り返し処理の一種ですws.Cells(ws.Rows.Count, 1).End(xlUp).Row
シートの最終行(データの末尾)を取得する書き方で、これも基本構文まとめで紹介したものですIf ws.Name <> "集計" Then
条件によって処理を分けるための書き方です
「何をしているか」がなんとなく分かるだけでも、後からシート名を変えたり、条件を1つ足したりといった軽い修正は自分でもできるようになります。
うまく動かないときの直し方
生成されたコードが一発で思い通りに動くとは限りません。うまくいかないときは、次のように状況を具体的に伝えると修正がスムーズです。
| 症状 | ChatGPTへの伝え方 | 期待できる対応 |
|---|---|---|
| 実行時エラーが出る | エラーメッセージの全文をそのままコピペして貼る | エラーの原因箇所を特定し、修正版のコードを提示してくれる |
| 意図と違う動作になる | 「期待する動き」と「実際に起きた動き」の両方を具体的に書く | ズレの原因を推測し、条件分岐などを直してくれる |
| 特定のシートだけ対象から外したい | 「〇〇という名前のシートは対象外にしてください」と条件を追加して伝える | 除外条件を追加したコードに修正してくれる |
| コードは動くが処理が遅い | 「データ件数が多いと時間がかかる」と状況を伝える | 画面更新の停止など、高速化の工夫を提案してくれる |
ポイントは、「動かない」とだけ伝えるのではなく、エラーメッセージや期待する結果を具体的に添えることです。情報が多いほど、ChatGPTも的確な修正案を返しやすくなります。
注意点・限界
- 本番データに使う前にテストデータで動作確認する:生成されたコードが常に正しいとは限らないため、ダミーのデータで一度動かしてから本番のファイルに適用しましょう
- 実際の業務データや個人情報をそのまま貼り付けない:シートの中身やエラー画面をChatGPTに共有する際は、実在の取引先名・個人情報などが含まれていないか確認し、必要であれば伏せ字や架空のデータに置き換えてから伝えましょう(社内の情報取り扱いルールも確認してください)
- 複雑な処理は一度に頼まない:欲しい機能が多いときほど、1つずつ段階的に指示を出す方が、原因の切り分けがしやすくなります
まとめ
VBAのコードを自分で1から書けなくても、ChatGPTに「やりたいこと」を具体的に伝え、エラーが出たらその内容をそのまま伝えて直してもらう、というやり取りを繰り返せば、業務の自動化は十分に進められます。
Excel VBAで見積書・請求書の作成を自動化する方法やExcel VBA初心者がまず覚えるべき基本構文まとめ、複数シートのデータを1つにまとめるVBAマクロの作り方で紹介した内容も、ChatGPTへの指示に使えるお題としてそのまま活用できます。まずは身近な繰り返し作業から、ChatGPTに相談してみてください。
プログラミングを使わずに生成AIを業務効率化に使いたい場合は生成AIを使った業務効率化ネタ5選を、VBAとPythonどちらを学ぶべきか迷っている場合はVBAとPython、業務自動化にはどちらを学ぶべきか比較もあわせてご覧ください。