Excel業務を効率化するために ChatGPT に VBA コードを書かせたところ、「エラーになる」「実行しても動かない」「宣言していない変数が入っている」などのトラブルが発生した経験はありませんか?
ChatGPT は VBA のコード生成を得意としていますが、複雑なロジックや複数の要件が絡む処理になるほど“間違ったコード”を返すケースが増えるのも事実です。実務では、ChatGPT が作成したコードをそのままコピペして動かないケースが頻発します。
この記事では、ChatGPT が VBA コードを誤生成する本当の理由と、その対処方法を徹底解説します。コード生成の精度を上げたい方、ChatGPT による自動化効率を高めたい方、VBA 初心者〜中級者にも役立つ内容です。
目次
- ✅ ChatGPTがVBAコードを間違える本質的な理由
- ・理由1:ChatGPTは“実行テスト”ができない
- ・理由2:曖昧な指示は“推測”してコード化される
- ・理由3:Excelの「状態」を把握できない
- ・理由4:複雑なロジック分岐が苦手
- ・理由5:古いVBAの書き方を混在させてしまう
- ✅ ChatGPTが作成したVBAに多い具体的な誤り例
- ・誤り1:Set を付け忘れる
- ・誤り2:Variant型多用による予期せぬ挙動
- ・誤り3:最終行取得の誤り
- ・誤り4:ループのズレ
- ・誤り5:Exit For を入れるべき場所に入れていない
- ・誤り6:Select / Activate 多用で不安定
- ・誤り7:On Error の誤用
- ✅ ChatGPTに正確なVBAを書かせるための最適プロンプト
- ・プロンプト1:ブック・シートの状態を具体的に伝える
- ・プロンプト2:最終的に何をしたいか“1文で伝える”
- ・プロンプト3:処理のステップを分解して提示する
- ・プロンプト4:使ってよい構文を制限する
- ・プロンプト5:例外条件を必ず伝える
- ・プロンプト6:最後に“レビュー依頼”を行う
- ✅ ChatGPTが生成したVBAコードを正確に修正する方法
- ・方法1:ChatGPTにエラー内容を伝える
- ・方法2:実行前に「Option Explicit」を入れる
- ・方法3:部分単位で実行して動作確認
- ・方法4:ChatGPTに「段階コード」を書かせる
- ✅ 実務でChatGPT×VBAを成功させるための“正しい運用ルール”
- ・ルール1:ChatGPTに構造化した情報を渡す
- ・ルール2:依頼ごとに必ず「制約」をつける
- ・ルール3:ChatGPTのコードは必ずレビューする
- ・ルール4:例外ケースを必ず想定させる
- ・ルール5:ChatGPTを“VBAの先生”ではなく“補助ツール”と認識する
- ✅ VBAコード生成の精度を最大化する「プロンプト実例集」
- ・例1:コピー処理
- ・例2:フィルター抽出の自動化
- ・例3:PDF出力の自動化
- ✅ まとめ:ChatGPTのVBA生成精度は“使い方次第”で大きく変わる
✅ ChatGPTがVBAコードを間違える本質的な理由
ChatGPT が VBA コードを誤って生成するのには、特有の理由があります。
・理由1:ChatGPTは“実行テスト”ができない
最大の理由はこれです。
ChatGPT は Excel VBA を実際に実行する環境を持ちません。
そのため、
- コンパイルエラー
- 型の不一致
- 未宣言変数
- オブジェクト参照ミス
- スコープの誤り
- Set が必要な場面で省略
こうした問題を 実行して確認できない ままコードを返します。
・理由2:曖昧な指示は“推測”してコード化される
曖昧なプロンプトで依頼すると、ChatGPT は不足情報を推測して補完しようとします。
例:
特定の列を抽出してください
これだけでは、
- どの列か?(A列?B列?)
- 見出し行はあるか?
- フィルターなのか抽出なのか?
- テーブル形式なのか?
すべてが曖昧であるため、誤った処理を組み立ててしまいます。
・理由3:Excelの「状態」を把握できない
ChatGPT は以下を理解していません。
- シートの保護有無
- セルの結合
- テーブルの範囲
- 動的範囲が必要か
- ブックが複数開かれているか
Excel の“環境依存”の要素がVBAコードの成否に直結しますが、ChatGPTはそれを認識できません。
・理由4:複雑なロジック分岐が苦手
VBAで特に間違いが多いのが、分岐が多い処理。
- 複数条件のIF
- For × If × Select
- ネストが連続する条件
- 例外処理の抜け漏れ
これらは ChatGPT が誤りやすい典型パターンで、途中で条件が矛盾したコードを生成することがあります。
・理由5:古いVBAの書き方を混在させてしまう
ChatGPT は訓練データの影響で、
- 古い書き方(Variant多用)
- 推奨されない構文
- 非効率なループ
を混在させるケースがあります。
特に「With 〜 End With」や「Option Explicit」の扱いには誤りが出やすくなります。
✅ ChatGPTが作成したVBAに多い具体的な誤り例
・誤り1:Set を付け忘れる
rng = Range("A1")
と生成してしまい、
Set rng = Range("A1")
が正しいのに誤りが発生します。
参考:【VBA】Setとは?オブジェクト変数の基本と参照の仕組み|初心者が必ず押さえるべき基礎文法
・誤り2:Variant型多用による予期せぬ挙動
Dim i
のように型を指定していないと、意図しない動きが起きます。
・誤り3:最終行取得の誤り
ChatGPT がよく返す誤式:
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
これは正しいですが、
シートを指定していないため、別シート上のCellsを参照する可能性があります。
参考:【VBA】最終行を取得する方法|Rowsを活用して効率的にデータ範囲を特定する
・誤り4:ループのズレ
For の開始と終了がずれているケース。
For i = 2 To lastRow - 1
Next i
のように余計な -1 を入れてしまうなど。
・誤り5:Exit For を入れるべき場所に入れていない
ChatGPT は Exit For / Exit Do などの制御文を忘れることがあります。
参考:【VBA】処理を止める「Exit」の使い方|Sub・Function・ループでの中断方法を解説
・誤り6:Select / Activate 多用で不安定
ChatGPT は初心者向けのコードを返すことがあるため、不安定な Select 地獄を生成します。
・誤り7:On Error の誤用
誤例:
On Error Resume Next
を乱用してしまい、エラーを握りつぶす危険なコードを生成するケースがあります。
参考:【VBA】エラーハンドリングの基本と実務で使えるオープンエラーハンドリング徹底解説
✅ ChatGPTに正確なVBAを書かせるための最適プロンプト
ここでは実務で最も成功率が高い「プロのプロンプト構成」を紹介します。
・プロンプト1:ブック・シートの状態を具体的に伝える
「売上データ.xlsx」の「集計」シートを対象にします。
A列に日付、B列に売上、C列に担当者が入っています。
これだけで精度が一気に向上します。
・プロンプト2:最終的に何をしたいか“1文で伝える”
B列の売上が10000以上の行だけ別シートへコピーしたい
・プロンプト3:処理のステップを分解して提示する
ステップ:
① 最終行取得
② 行ごとに判定
③ 条件一致行のみコピー
④ 貼り付け後に最終行管理
ChatGPTは分解された情報の方が正確に理解できます。
・プロンプト4:使ってよい構文を制限する
例:
Select / Activate を使わないでください。
Option Explicit を付けてください。
・プロンプト5:例外条件を必ず伝える
ヘッダー行(1行目)は処理の対象外です。
これを付けるだけでコードのズレが大幅に減ります。
・プロンプト6:最後に“レビュー依頼”を行う
プロンプト例:
生成したコードにミスがないか再確認し、改善点があれば修正してください。
ChatGPTは自己レビューによって精度が2段階上がります。
参考:プロンプトとは何か?意味・役割・AI時代における正しい使い方を基礎から理解する
✅ ChatGPTが生成したVBAコードを正確に修正する方法
・方法1:ChatGPTにエラー内容を伝える
例:
実行時エラー1004が発生しました。
原因を推測し、修正したコードを提示してください。
エラー内容を伝えると確度の高い修正が得られます。
・方法2:実行前に「Option Explicit」を入れる
宣言漏れをすぐ発見できるため、ChatGPTの誤りに気づきやすくなります。
・方法3:部分単位で実行して動作確認
VBAは一括実行ではなく、パーツごとに動作検証するのが鉄則。
- 最終行取得
- 条件判定
- コピー処理
など分割するとミスの箇所がわかります。
・方法4:ChatGPTに「段階コード」を書かせる
例:
まず最終行取得のコードだけ書いてください。
次に条件判定部分だけ書いてください。
段階式にすると間違いが激減します。
参考:ChatGPTにVBAコードを正確に書かせる方法|実務レベルのマクロを安定生成するプロンプト設計術
✅ 実務でChatGPT×VBAを成功させるための“正しい運用ルール”
・ルール1:ChatGPTに構造化した情報を渡す
ChatGPTは整理されたデータを渡されるほど正確にコードを書きます。
・ルール2:依頼ごとに必ず「制約」をつける
- Select禁止
- Variant禁止
- 宣言必須
- 同名シートへのコピー時の例外処理必須
など。
・ルール3:ChatGPTのコードは必ずレビューする
ChatGPTは「万能」ではなく、「人間のレビューを前提」として使用する工具だと理解する必要があります。
・ルール4:例外ケースを必ず想定させる
例:
シートが存在しない場合
空データの場合
フィルターが残っている場合
・ルール5:ChatGPTを“VBAの先生”ではなく“補助ツール”と認識する
ChatGPTはVBAの最適化・高速化・整理整頓に強く、
実務向けのロジック構築は人間の判断が必要です。
✅ VBAコード生成の精度を最大化する「プロンプト実例集」
・例1:コピー処理
A列が空白でない行のみ「集計」シートへ転記するVBAコードを作成してください。
制約:
- Option Explicit必須
- Select / Activate禁止
- 最終行はUsedRangeでなくRows.Countで取得
・例2:フィルター抽出の自動化
A列が「営業」の行を抽出し、別シートへ貼り付けるコードを書いてください。
ヘッダー行は1行目。
シート名は「元データ」と「営業抽出」。
・例3:PDF出力の自動化
アクティブシートをPDFとしてデスクトップに保存するコードを書いてください。
保存形式は yyyy-mm-dd_シート名.pdf としてください。
✅ まとめ:ChatGPTのVBA生成精度は“使い方次第”で大きく変わる
- ChatGPTは実行環境を持たないため、VBAのテストができない
- 曖昧なプロンプトでは推測に頼り誤ったコードを生成する
- Excelの状態を説明すると精度が大幅に向上する
- 使用関数・構文の制約を指定すると安定したコードが返る
- ChatGPT自身にレビューさせることで品質はさらに向上する
- 複雑な処理は段階式で生成させるのが最も成功率が高い
- ChatGPTは“VBAを正確に書くための強力な補助ツール”として使うのが正しい
ChatGPTを正しく使うことで、VBA作成のスピードは飛躍的に向上し、
Excel業務全体の効率化につながります。