AI × Excel のトラブル ChatGPT活用術 トラブル解決

ChatGPTがVBAコードを間違える原因と正しい対策を徹底解説

Excel業務を効率化するために ChatGPT に VBA コードを書かせたところ、「エラーになる」「実行しても動かない」「宣言していない変数が入っている」などのトラブルが発生した経験はありませんか?

ChatGPT は VBA のコード生成を得意としていますが、複雑なロジックや複数の要件が絡む処理になるほど“間違ったコード”を返すケースが増えるのも事実です。実務では、ChatGPT が作成したコードをそのままコピペして動かないケースが頻発します。

この記事では、ChatGPT が VBA コードを誤生成する本当の理由と、その対処方法を徹底解説します。コード生成の精度を上げたい方、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業務全体の効率化につながります。

    -AI × Excel のトラブル, ChatGPT活用術, トラブル解決