Excel業務を効率化する中で、「既にあるVBAコードを修正したい」という場面は非常に多くあります。そこでChatGPTにコードを貼り付け、「このVBAを◯◯するように修正してください」と依頼したのに、意図したとおりに修正されなかった、動かないコードになってしまった、という経験はありませんか?
ChatGPTはゼロからVBAを書くのは比較的得意ですが、既存コードの修正だけは誤りが多く、実務で最も失敗が起きやすい領域です。
- ロジックを読み違える
- 変数スコープを壊してしまう
- 途中の部分だけ勝手に書き換える
- For や If の整合性を崩す
- 必要な行を削除してしまう
こういったケースは日常的に発生します。
この記事では、ChatGPTがなぜ既存のVBAを正しく修正できないのか、その根本原因と、実務で使える“最適な修正依頼法・プロンプト・運用方法”を徹底解説します。
VBAを扱う方、ChatGPTを業務効率化に活用したい方、RPA・自動化担当者にも必ず役立つ内容です。
目次
- ✅ ChatGPTが既存VBAを正しく修正できない本当の理由
- ・理由1:ChatGPTはコードの「全体脈絡」を理解するのが苦手
- ・理由2:ChatGPTは「状況依存コード」を理解できない
- ・理由3:部分修正を依頼すると“全体を書き換えようとする”
- ・理由4:“どこを変更すべきか”の位置情報が欠落する
- ・理由5:修正に必要な“背景情報”が不足している
- ✅ ChatGPTが修正すると壊れやすい「典型的なVBAパターン」
- ・典型1:最終行取得が複数回使われている
- ・典型2:条件分岐が複雑なIF
- ・典型3:ループの入れ子構造(For × Do)
- ・典型4:シート操作が多いコード
- ・典型5:プロシージャの分割が不十分
- ✅ ChatGPTに既存VBAを「正しく修正させる」ための最重要ルール
- ・ルール1:コード全体ではなく「修正対象の前後だけ」を渡す
- ・ルール2:変更点を“文章で”明確に箇条書きする
- ・ルール3:修正する位置を「コメント行」で指定する
- ・ルール4:禁止事項を必ず明記する
- ・ルール5:修正後は必ずChatGPTに“レビューさせる”
- ✅ ChatGPTで既存VBAの修正精度を100%に近づける“最適プロンプト”
- ・最強プロンプト(コピペ可)
- ✅ ChatGPTが“間違った修正”を出してきたときの対処ステップ
- ・ステップ1:間違った部分だけ切り出して再依頼
- ・ステップ2:“論理の意図”を説明する
- ・ステップ3:比較方式で修正させる
- ・ステップ4:構文チェックのみの依頼
- ・ステップ5:生成後のコードをChatGPTにレビュー依頼
- ✅ 既存VBA修正に強い「段階式依頼フロー」
- ✅ ChatGPTが既存VBA修正に強くなる「補助プロンプト集」
- ・プロンプト1:位置指定修正
- ・プロンプト2:最適化依頼
- ・プロンプト3:追加機能のみ挿入
- ・プロンプト4:削除の誤りを防ぐ
- ・プロンプト5:安全な改善
- ✅ 実務で起きがちな「ChatGPTによる破壊例」と修正法
- ・破壊例1:変数宣言の削除
- ・破壊例2:If のEnd If漏れ
- ・破壊例3:ループ構造を勝手に変える
- ・破壊例4:不要な With を追加
- ・破壊例5:コメントを消す
- ✅ まとめ:ChatGPTは“既存VBA修正”が最も苦手だが、正しい依頼方法で精度は大幅に向上する
✅ ChatGPTが既存VBAを正しく修正できない本当の理由
ChatGPTが既存VBAに対して誤修正を行うのには、明確な“構造的理由”があります。
・理由1:ChatGPTはコードの「全体脈絡」を理解するのが苦手
ChatGPTは自然言語での推論は得意ですが、VBAのような構造化されたコードでは、
- 変数のスコープ
- 宣言の位置
- 依存関係
- 流れ(ロジックの時系列)
- 前後関係(If〜End If / For〜Next)
を正確に把握するのが苦手です。
そのため、既存コードの一部改造を依頼した際に、
- 必要な変数の宣言を消す
- 逆に不要な宣言を追加する
- For や If の対応関係を破壊する
といった“ロジック全体を崩してしまう”ケースが生じます。
・理由2:ChatGPTは「状況依存コード」を理解できない
既存コードの中には、
- 画面依存(Select/Activate)
- Excelの前提状態(フィルター、結合セル)
- ブックが複数ある前提
- RPAが併用されている前提
といった“実行環境依存”の要素が含まれています。
ChatGPTは実行環境を感知できないため、それらを誤って削除したり、逆に動かないコードを書き足してしまいます。
・理由3:部分修正を依頼すると“全体を書き換えようとする”
ChatGPTは修正依頼を受けると、次のような動作をします。
- コード全体を理解しようとする
- 必要以上に書き換えようとする
- 正常に動いている部分も改善しようとする
結果として、
「余計なところまで書き換わって壊れる」
ということが起こります。
・理由4:“どこを変更すべきか”の位置情報が欠落する
ChatGPTにコードを渡しても、どの部分を変更すべきかを正確に伝えないと、
- 違う場所を書き換える
- 同じロジックを2重に追加する
- 条件分岐の挿入位置を誤る
など、修正箇所を誤認識します。
・理由5:修正に必要な“背景情報”が不足している
既存VBAは多くの場合、次のような背景を持っています。
- 他の人が作った
- 過去の業務の都合で追加された
- ワークシート構造が変わっている
- 不要なコードが混ざっている
- 複数のマクロが連携して動いている
ChatGPTは“背景”を理解しないため、必要な部分を誤って消すことがあります。
✅ ChatGPTが修正すると壊れやすい「典型的なVBAパターン」
・典型1:最終行取得が複数回使われている
ChatGPTが勝手に lastRow を上書きして処理が壊れる。
・典型2:条件分岐が複雑なIF
IF × ELSE × ELSEIF の段階が多いほど破壊されやすい。
・典型3:ループの入れ子構造(For × Do)
ネスト整合性が壊されやすい。
・典型4:シート操作が多いコード
Select を消したことでかえって動かなくなるケースもある。
・典型5:プロシージャの分割が不十分
1つの Sub が長いと ChatGPT の理解力が追い付かず壊れる。
✅ ChatGPTに既存VBAを「正しく修正させる」ための最重要ルール
これは実務で最も成功率の高い方法です。
・ルール1:コード全体ではなく「修正対象の前後だけ」を渡す
ChatGPTにコード全体を渡すと書き換えすぎて壊れるため、
修正する部分の前後20〜30行だけを渡す
のが最適です。
・ルール2:変更点を“文章で”明確に箇条書きする
例:
【やりたいこと】
・B列が空白の行は処理対象外にしたい
・出力先シートを「集計」→「結果」に変更したい
・行番号のカウントはiではなくjを使いたい
ChatGPTはこうした構造化情報に強いです。
・ルール3:修正する位置を「コメント行」で指定する
例:
'▼ここから修正▼
(該当処理)
'▲ここまで修正▲
ChatGPTが迷子にならず、正確に修正できます。
・ルール4:禁止事項を必ず明記する
Select / Activate を使わない
コード全体を書き換えない
宣言部分を変更しない
これだけで壊れにくくなります。
・ルール5:修正後は必ずChatGPTに“レビューさせる”
上記コードに構文エラーがないか、論理矛盾がないかチェックし、必要な修正だけ行ってください。
二段階生成で精度が跳ね上がります。
参考:ChatGPTが構文エラーのあるVBAを出力する原因と正しい修正案を徹底解説
✅ ChatGPTで既存VBAの修正精度を100%に近づける“最適プロンプト”
これを使うと、壊れない修正が可能になります。
・最強プロンプト(コピペ可)
これから既存のVBAコードの一部修正を依頼します。
【重要ルール】
・該当箇所以外は絶対に変更しない
・Select / Activate を使わない
・宣言部分は変更しない
・構文を壊さない
・処理の順番を変えない
・修正する場所はコメント行(▼▼)で囲った範囲のみ
【修正したい内容】
1. ◯◯条件を追加したい
2. 出力先シート名を◯◯へ変更したい
3. エラー時の挙動を◯◯にしたい
【対象コード】
(修正箇所前後だけ貼る)
以上を踏まえて、該当部分だけ正確に修正してください。
このプロンプトは実務で最も成功率が高い方法です。
✅ ChatGPTが“間違った修正”を出してきたときの対処ステップ
・ステップ1:間違った部分だけ切り出して再依頼
失敗したコード全体ではなく、問題行だけ渡します。
・ステップ2:“論理の意図”を説明する
ChatGPTは意図を理解しないと誤るため、
この部分の処理意図は「◯◯です」
と説明すると正しい修正を提示しやすくなります。
・ステップ3:比較方式で修正させる
元のコードと、あなたが出したコードの違いを比較し、誤りがあれば修正してください。
ChatGPTは比較に非常に強いです。
・ステップ4:構文チェックのみの依頼
構文エラーに関係する部分のみ指摘してください。
“修正”ではなく“指摘”にすると壊れません。
・ステップ5:生成後のコードをChatGPTにレビュー依頼
ChatGPTは自己レビューが最も得意な作業です。
参考:ChatGPTで要件定義を自動化するプロンプト術|業務要件・機能要件・非機能要件まで整理できる
✅ 既存VBA修正に強い「段階式依頼フロー」
- 修正したい部分を明確化
- 修正箇所の前後だけ切り出す
- ルール(禁止事項)を提示
- 修正案を作成してもらう
- 修正案を自己レビューさせる
- 全体コードに組み戻す
- Excel側で検証
このフローを使うと、ChatGPTを“壊れないコード修正アシスタント”として活用できます。
✅ ChatGPTが既存VBA修正に強くなる「補助プロンプト集」
・プロンプト1:位置指定修正
コメント「▼修正開始」から「▲修正終了」の部分だけ修正してください。
・プロンプト2:最適化依頼
該当部分の処理スピードを改善してください。ただし論理は絶対に変更しないでください。
・プロンプト3:追加機能のみ挿入
既存ロジックを保ったまま、「〇〇」機能だけ追加してください。
・プロンプト4:削除の誤りを防ぐ
既存コードの行削除は禁止です。追加または置換のみで対応してください。
・プロンプト5:安全な改善
構文を壊さず、既存の処理に影響を与えない改善のみ行ってください。
✅ 実務で起きがちな「ChatGPTによる破壊例」と修正法
・破壊例1:変数宣言の削除
突然 Dim の一部が消えることがある。
→ 宣言部分を触らないルールをプロンプトで明示。
・破壊例2:If のEnd If漏れ
ChatGPTは深いネストで失敗しやすい。
→ 修正部分の前後だけを渡して整合性を保持。
・破壊例3:ループ構造を勝手に変える
For → Do に変えてしまう場合あり。
→ 処理構造の変更禁止のルールを明記。
・破壊例4:不要な With を追加
→ 使用禁止または明示的な制約を指定する。
・破壊例5:コメントを消す
背景が消えると破壊連鎖が起きるため注意。
✅ まとめ:ChatGPTは“既存VBA修正”が最も苦手だが、正しい依頼方法で精度は大幅に向上する
- ChatGPTは既存コードのロジック全体を100%理解できない
- 曖昧な指示だと推測で書き換え、誤修正が起こる
- 修正範囲を最小化し、前後の挿入位置を明確にすると精度が急上昇
- 禁止事項を設定すると壊れにくい
- ChatGPTの自己レビューは極めて有効
- 最適プロンプトを使えば、実務でも高精度な修正が可能
ChatGPTは「ゼロから書くより、修正のほうが難しい」ことを理解し、正しい依頼手順を踏むことで、高品質のVBA修正が実現できます。