マクロの守り中小企業のAI導入支援|Excelマクロ(VBA)の属人化の解消からExcelマクロ(VBA)の引き継ぎ 専門

コラム移し方の比較

AIに書かせたVBAを後から直せる形にするには?生成の注意点を、指示2通り×各5回で数えた

前任者がいないマクロにしないために、AIが書いたVBAを次の人が直せる形にする記事です。AIでVBAを生成するときの注意点は、要件だけを渡すと、シート名とフォルダのパスがコードに直接書かれ、CSVの列も番号で決め打ちされることです。同じ要件をClaude Sonnet 5.5に5回ずつ書かせると、要件だけでは5回ともパスとシート名を2個ずつ直書きし、いちばん長い手続きは74〜129行でした。6つの決まりを足すと直書きは0個、最長は24〜32行です。マクロの守りの実験です。(2026年10月時点)

読み解きから直す・置き換えるまでの流れと費用はExcelマクロの引き継ぎのページにまとめています。

要点

  • 要件だけで書かせたVBAは、5回ともフォルダのパスとシート名を2個ずつコードに直接書きました。
  • 6つの決まりを指示に足すと、直書きは5回とも0個になり、列も見出しの名前で探すようになりました。
  • Option Explicitとファイル操作のエラー処理は、要件だけの5回にも全部入っていました。
  • 決まりつきはコードが83〜176行から239〜266行に増えるので、引き継ぐ人は設定シートから読みます。
目次
  1. AIにVBAを書かせると、どこが後で直しにくくなりますか?
  2. 実験では、何をどう比べたのですか?
  3. 決まりを足すと、何が減って何が増えましたか?
  4. 指示に入れる決まりは、どう書けばよいですか?
  5. AIが書いたマクロを引き継ぐ上司は、何を確かめればよいですか?
  6. このサイトで相談するには?
  7. よくある質問

AIにVBAを書かせると、どこが後で直しにくくなりますか?

AIが書いたマクロは、書いた人(AIへの指示を出した人)が異動や退職をすると、そのまま「作った人がいないマクロ」になります。この記事は、そうなる前に、後任が直せる形に整える見方です。

直しにくくなるのは、フォルダのパスとシート名がコードの中に直接書かれ、CSVの列も番号で決め打ちされる所です。共有フォルダの名前が変わる、列が1つ増える、といった社内の変化のたびに、誰かがVBAを開いて直すことになります。

マクロの守りが同じ要件をAIに5回ずつ書かせたところ、要件だけの指示では5回ともこの3つが残りました。指示に6つの決まりを足すと、5回とも消えています。表にまとめます。引き継ぎの全体の進め方はExcelマクロの引き継ぎにあります。

数えたもの(5回の範囲) 要件だけ 決まりつき
パスの直書き(個) 2 0
シート名の直書き(個) 2 0
列を見出しの名前で探す 0回 5回
いちばん長い手続き(行) 74〜129 24〜32
コード全体(行) 83〜176 239〜266
1つの手続きの最長の行数を10回分並べた点の図。要件だけは74〜129行、決まりつきは24〜32行で、5回とも指示した50行以内だった1つの手続き(Sub・Function)の、いちばん長いものの行数020406080100120140指示した上限 50行要件だけ74〜129行決まりつき24〜32行行(空行・コメントを含む)運営者の実験(2026-10-16、Claude Sonnet 5.5、同じ要件を各5回)。ai_vba_metrics.py で数えた値。点が1回分
図1 1つの手続きの、いちばん長いものの行数(10回)。マクロの守りの実験(2026年10月16日、Claude Sonnet 5.5)。決まりつきは5回とも、指示した50行以内でした。

一方で、Option Explicitとファイル操作のエラー処理は、要件だけでも5回とも入っていました。ここは差が出ていません。Option Explicitは、宣言していない変数をコンパイルの時点で止める1行です(Microsoft Learn)。AIの書くVBAで目立つ穴は、文法の作法より、社内の名前を誰がどこで変えるかの設計にありました。

実験では、何をどう比べたのですか?

同じ要件を「要件だけ」と「6つの決まりつき」の2通りでAIに渡し、5回ずつ書かせました。そのコードで、引き継ぐ人が困る書き方を数えています。AIはClaude Sonnet 5.5です。2026年10月16日の21時42分から52分に、道具も会話の履歴もない1回の応答として実行しました。

要件は、共有フォルダにある当日の受注CSVを「受注明細」シートに貼ることから始まります。続けて得意先コードごとに数量と金額を「集計」シートに合計し、PDFで保存します。決まりつきでは、要件の後ろに次の6つを足しました。

  1. 各モジュールの先頭にOption Explicitを書く
  2. シート名・フォルダのパス・ファイル名の形式は「設定」シートのセルから読む
  3. 列は番号で決め打ちせず、見出しの名前で探す
  4. ファイルを開く・保存する処理にエラー処理を入れ、どのファイルで何が起きたかを表示する
  5. 1つの手続きは50行以内にし、処理ごとに分ける
  6. 名前は何をするか分かるものにし、各手続きの先頭に1行の説明を書く

要件の文は、2通りとも同じです。

数えたのは自作のスクリプト(ai_vba_metrics.py)です。回答からコードの部分だけを取り出し、コメントを除いて数えます。パスの直書きは、円記号を含む文字列の数です。

lits = re.findall(r'"((?:[^"]|"")*)"', body)        # 文字列をすべて拾う
path_literal = sum(1 for s in lits if '\\' in s and s.strip('\\'))
sheet_literal = sum(1 for s in lits if s in {'受注明細', '集計'})

ファイル操作のエラー処理は、その手続きか、呼び出し元のどれかにOn Error GoToがあれば「あり」としました。呼ばれた側にエラー処理がなければ、エラーは呼び出し元のエラー処理へ渡るためです(Microsoft Learn)。

限界もあります。コードはExcelで動かしておらず、正しく集計できるかは確かめていません。AIは1種類、要件も1つです。

決まりを足すと、何が減って何が増えましたか?

減ったのは直書きと長い手続きで、増えたのは手続きの数とコードの行数です。要件だけの5回は、手続きが1〜6個で、いちばん長いものは74〜129行でした。1回目と2回目は、手続きが1つだけです。決まりつきの5回は手続きが15〜18個に分かれ、最長でも24〜32行です。

2通りの指示で各5回生成したVBAの一覧表。要件だけでは5回ともパスの直書き2個・シート名の直書き2個・見出しで列を探す処理なし、最長の手続きは74〜129行。決まりつきでは5回とも直書き0個・見出しで探す処理あり、最長24〜32行、コードは239〜266行に増えた同じ要件を2通りの指示で各5回。引き継ぐ人が困る書き方の数パスの直書きシート名の直書き見出しで列を探す最長の手続きコード要件だけ1回目2個2個なし91行83行2回目2個2個なし129行114行3回目2個2個なし129行142行4回目2個2個なし109行111行5回目2個2個なし74行176行決まりつき1回目0個0個あり25行239行2回目0個0個あり27行266行3回目0個0個あり28行264行4回目0個0個あり32行245行5回目0個0個あり24行245行運営者の実験(2026-10-16、Claude Sonnet 5.5、同じ要件を各5回)。ai_vba_metrics.py で数えた値。赤は直書き・見出しで探さない・50行を超える
図2 10回の生成ごとの結果。赤は、直書きがある・見出しで列を探さない・50行を超える、のどれか。数え方は ai_vba_metrics.py で、コードはExcelでは動かしていません。

CSVの列の読み方は、どう変わりましたか?

要件だけの5回は、CSVの列を2列目・5列目のような番号か、“B”のような列の文字で読んでいました。CSVの列が1つ増えると、止まらずに違う列を合計するおそれがあります。名前で探せば、ずれません。決まりつきの5回は、見出しの行から「得意先コード」などの名前で列を探す関数を作りました。

コードの行数とエラーの扱いは?

コードは83〜176行から239〜266行へ、2倍ほどに増えています。設定シートを読む部品と、見出しで列を探す部品が加わったからです。読む量も増えます。

On Error Resume Next(エラーを無視して次の行へ進む書き方)も、要件だけの0〜1か所から1〜3か所に増えました。中を見ると、5回とも、ブックを閉じる行とシートがあるかを確かめる行に限られていました。

指示に入れる決まりは、どう書けばよいですか?

決まりは「何を書くな」より「どこから読むか」で書くと伝わります。今回の2番目の決まりは、読み先の「設定」シートを名指ししました。AIは5回とも、その場所を使いました。設定シートの項目の表をコードの前に示し、どのセルに何を書くかも残っています。

決まりつき1回目のVBAの呼び出し関係の図。実行用のRunDailyOrderReportが、CSVの取り込み・得意先ごとの合計・PDFの保存の3つを呼び、それぞれが小さな部品を呼ぶ。シート名・パス・見出し名は設定シートを読む部品から受け取る決まりつき1回目のマクロの呼び出し関係(6モジュール・17手続き)RunDailyOrderReport毎朝これを実行ImportCsvToDetailSheetCSV を開いて貼る(エラー処理あり)WriteSummarySheet得意先ごとに合計(エラー処理あり)ExportSummaryToPdfPDF で保存(エラー処理あり)OpenCsvAsTextCopyCsvToDetailSheetConvertColumnToNumberSumByCustomerCodeWriteTotalsToSheetCheckFolderExists設定シートを読む部品GetSetting(項目名)BuildFullPathFindHeaderColumn(見出し名)運営者の実験(2026-10-16、Claude Sonnet 5.5 の出力 rules_1)。小さな部品の一部(GetLastRow など)は省いた
図3 決まりつき1回目の呼び出し関係。名前はAIの出力のままです。シート名・パス・見出し名は、右下の設定シートを読む部品から受け取ります。

要件の後ろに足す3つの決まりは?

私がAIにマクロを書かせるときは、要件の後ろに次の3つを必ず足します。社内で変わりうる名前(シート・フォルダ・ファイル名の形式)の置き場所、列の探し方、1つの手続きの長さの上限です。どれも1行で書けます。Option Explicitとエラー処理も書き添えますが、今回は要件だけでも入っていたので、差が出たのは前の3つでした。

AIが書き添えた補足は、どう扱いますか?

決まりつきの回答の中には、自分から「動作確認はしていません」と書いた回がありました。補足は読み飛ばしやすい所です。けれども、前提や未確認の点はそこに書かれています。社内に残すときは、その補足もコードと一緒に保存します。

AIが書いたマクロを引き継ぐ上司は、何を確かめればよいですか?

確かめるのは、名前の置き場所、いちばん長い手続き、エラーを無視する行の3つです。どれもVBEの検索で見つかります。VBAを読み慣れていなくても数えられます。

  1. ブックを複製し、過去の日付のCSVで1回動かして、集計とPDFを手で突き合わせる
  2. VBEで「\」と実際のシート名を検索し、コードに直接書かれていないかを見る
  3. いちばん長い手続きを探し、50行を超えていれば分け方をAIに頼み直す
  4. On Error Resume Nextを検索し、ブックを閉じるなど失敗しても困らない所だけかを見る
  5. 設定シートの項目と、変えてよい人を引き継ぎ書に書く

5番目の書き方はVBAの引き継ぎ書のひな形にあります。手続きが15個ほどになると、どこから呼ばれるかを追うのに手間がかかります。今回の決まりつきは、5回とも15個以上でした。その場合はマクロの処理を図にして読み解く方法のように、呼び出しの図を1枚作ってから読みます。

このサイトで相談するには?

AIで作り始めたマクロも、マクロの守りで、後から直せる形になっているかを一緒に見ます。何をどう頼むか決まっていなくても大丈夫です。御社のやり方に合わせて、進め方を一緒に考えます。

準備は要りません。無料で相談するからお送りください。

よくある質問

ChatGPTなど、ほかのAIでも同じ結果になりますか?
分かりません。今回はClaude Sonnet 5.5だけで、各5回です。数えるスクリプトはほかのAIの出力にも使えるので、社内で使うAIで数え直せます。
決まりつきで書かせたコードは、そのまま動きますか?
確かめていません。今回はコードを文字として数えただけで、Excelでは動かしていません。使う前に、ブックの複製と過去の日付のCSVで動かします。
設定シートは、誰が書き換えてよいのですか?
フォルダやシート名が変わったときに、マクロを開かずに直すための場所です。どの項目を誰が変えてよいかを、引き継ぎ書に書いておきます。
1つの手続きは何行までにすればよいですか?
決まった基準はありません。今回は50行以内と指示し、5回とも最長24〜32行に収まりました。止まった行のまわりを1画面で読める長さを目安にします。

この記事の実験・計算の条件

Claude Sonnet 5.5(Claude Code 2.1.301、道具なし)に同じ要件を2通りの指示で各5回、計10回。2026年10月16日に実行しました。

出典

  1. マクロの守りの実験(2026年10月16日、Claude Sonnet 5.5 を Claude Code 2.1.301 の claude -p で道具なしに実行、同じ要件を2通りの指示で各5回)。scripts/figs/ai_vba_generate.py・ai_vba_metrics.py・ai_vba_figs.py(2026年10月16日確認)
  2. Microsoft Learn「Option Explicit statement (VBA)」(更新 2024-02-01)(2026年10月16日確認)
  3. Microsoft Learn「On Error statement (VBA)」(更新 2024-02-01)(2026年10月16日確認)