Media > AI活用ユースケース > 情報システム > 担当者しか分からなくなった業務の VBA マクロを読ませて、処理の流れ・入力と出力・前提を仕様書に起こし、引き継ぎに使える形にする

担当者しか分からなくなった業務の VBA マクロを読ませて、処理の流れ・入力と出力・前提を仕様書に起こし、引き継ぎに使える形にする

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

業務で使われている Excel や Word の VBA マクロのソースを、マクロを動かさずに取り出してAIに読ませます。処理の流れ、読み書きするシートやファイル、外部とのつながり、暗黙の前提を、根拠の行番号付きで仕様書の様式にまとめます。

サマリー
生成AI
ChatGPT/Claude/Gemini
連携・自動化
Make/n8n/Power Automate
対象業界
その他/物流/製造/金融
対象部門
情報システム
対象業務
書類作成/要約
主な課題
属人化している/引き継ぎができていない/書類作成に時間がかかる
AIで行う処理
要約
主な効果
属人化解消/工数削減/教育コスト削減
導入難易度
★★★☆☆
実装レベル
半自動化
費用感
API連携(中)
人間の確認
必須
現在工数
60h/月
AI導入後
18h/月
想定削減
70%
年間削減
504h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 台帳から今月の対象を選び、利用部門からファイルの写しを受け取る
  2. 担当者がファイルを開き、Visual Basic Editor でモジュールを1つずつ表示して、プロシージャの一覧を作る
  3. コードを読み、どのシートやファイルを読み書きしているかを書き出す
  4. 起動のボタンやイベントから処理をたどり、処理の流れを書く
  5. 分からない点を利用部門に聞き、画面で実際の操作を見せてもらう
  6. 仕様書の様式に清書し、利用部門に確認してもらってから社内のポータルに置く
導入後(After)
  1. 人台帳から今月の対象を選び、ファイルの写しを分析用のフォルダに置く
  2. 自動マクロを動かさずにソースを取り出すツールで、モジュールごとのソースと、自動で動く処理・注意が要る命令・外部の場所の一覧を出す
  3. 自動認証情報らしき文字列を伏せ、行番号を付け、プロシージャの一覧を作る
  4. 自動AIがモジュールごとに、プロシージャの働き、読み書きするもの、呼び出し関係、前提を、根拠の行番号付きでまとめる
  5. 自動AIがモジュールの結果を束ね、起動から終了までの処理の流れ、仕様書の9項目、利用部門に確認する点を出す
  6. 人情報システム部の担当者が、根拠の行番号を開いて確かめ、仕様書の下書きを直す
  7. 人利用部門に確認する点を送り、答えを仕様書に書き込んでから社内のポータルに置く
各工程の詳しい説明を読む
  1. 台帳から今月の対象を選び、利用部門からファイルの写しを受け取る
  2. 担当者がファイルを開き、Visual Basic Editor でモジュールを1つずつ表示して、プロシージャの一覧を作る
  3. コードを読み、どのシートやファイルを読み書きしているかを書き出す
  4. 起動のボタンやイベントから処理をたどり、処理の流れを書く
  5. 分からない点を利用部門に聞き、画面で実際の操作を見せてもらう
  6. 仕様書の様式に清書し、利用部門に確認してもらってから社内のポータルに置く

(a)読む人によって仕様書の粒度が違う。 ある担当者はプロシージャごとに詳しく書き、別の担当者は全体の流れだけを書きます。同じ台帳に載っている仕様書なのに、引き継ぎに使えるものと使えないものが混ざっています。

(b)前提が書かれない。 「C列に日付が入っている」「フォルダ \\fs01\経理\月次\ が存在する」「Outlook が起動している」。コードを読めば分かる前提なのに、読んだ人にとって当たり前すぎて仕様書から落ちます。 移行のときに止まるのは、たいていこの前提です。

(c)ファイルを開くこと自体に気を遣う。 マクロ入りのファイルは、開いた時点で処理が動くように作られていることがあります。中身を確かめるために開いたら、ファイルが書き換わった、メールが飛んだ、という事故を避けるため、担当者は手順を慎重に踏み、そのぶん時間がかかります。

(d)月30本を4名で回すと、1本に使える時間が足りない。 1本120分でも月60.0時間で、4名の通常の仕事の合間に入れています。読み切れない長いマクロは、分かったところまでで仕様書を閉じることになります。

  1. 【人】 台帳から今月の対象を選び、ファイルの写しを分析用のフォルダに置く
  2. 【自動】 マクロを動かさずにソースを取り出すツールで、モジュールごとのソースと、自動で動く処理・注意が要る命令・外部の場所の一覧を出す
  3. 【自動】 認証情報らしき文字列を伏せ、行番号を付け、プロシージャの一覧を作る
  4. 【自動】 AIがモジュールごとに、プロシージャの働き、読み書きするもの、呼び出し関係、前提を、根拠の行番号付きでまとめる
  5. 【自動】 AIがモジュールの結果を束ね、起動から終了までの処理の流れ、仕様書の9項目、利用部門に確認する点を出す
  6. 【人】 情報システム部の担当者が、根拠の行番号を開いて確かめ、仕様書の下書きを直す
  7. 【人】 利用部門に確認する点を送り、答えを仕様書に書き込んでから社内のポータルに置く

2番目で「マクロを動かさない」ことが、この設計の前提です。 ファイルを Excel で開かずにソースを取り出すので、開いた瞬間に処理が動く心配がありません。 担当者が慎重に手順を踏んでいた時間が、ここで無くなります。

6番目と7番目は、省けません。 AIが行番号付きで書いたことは担当者がコードで確かめられますが、業務上の意味は利用部門にしか分かりません。 7番目を省いた仕様書は、「コードの説明書」にはなっても引き継ぎには使えません。

02今回想定するシステム構成

構成図
マクロ入りファイルの写し(xlsm/xls/xlsb/docm など)
   ▼【トリガー】分析用フォルダへの保存
olevba(oletools。分析用の端末で、マクロを動かさずに取り出す)
   │   モジュールごとのソース
   │   自動で動く処理/注意が要る命令/外部の場所(URL・ファイル名)
   ▼
前処理 ── 認証情報らしき文字列を伏せる、行番号、プロシージャの一覧
   ▼
Claude API ── モジュールごとの要約(1回目)
   │   プロシージャの働き、読み書きするもの、呼び出し関係、前提
   ▼
Claude API ── ファイル全体の仕様書(2回目)
   │   ① 起動のしかた  ② 処理の流れ  ③ 入力  ④ 出力
   │   ⑤ 外部とのつながり  ⑥ 前提  ⑦ エラー時の動き  ⑧ 確認する点
   ▼
【人:担当者が行番号で確かめ、利用部門が業務上の意味を確かめる】
   ▼
Power Automate(連携)── 台帳の更新、利用部門への確認依頼、ポータルへの保存
役割想定する製品代替候補
処理Claude API(モジュールごとの要約と、仕様書の9項目のまとめ)OpenAI API、Gemini API
前処理olevba(oletools。マクロを動かさずにソースを取り出す)Visual Basic Editor の手動のエクスポート
連携Power Automate(台帳の更新、確認依頼、仕様書の保存)Make、n8n
保管社内のポータル(仕様書)、ファイルサーバー(ソースと記録)文書管理システム

ソースの取り出しには、olevba を使います。 oletools のドキュメントでは、olevba は Microsoft Office の文書から VBA マクロを検出し、ソースコードを平文で取り出し、セキュリティに関わるパターンを検出するツールとされています。対応する形式は、Word(.doc、.dot、.docm、.dotm)、Excel(.xls、.xlsm、.xlsb)、PowerPoint(.ppt、.pptm、.ppsm)などです。

olevba が出す3種類の印が、仕様書の材料になります。 AutoExec は自動で動く処理の起点、Suspicious はマルウェアに使われやすい命令、IOC は URL・IPアドレス・実行ファイル名などです。本来はマルウェアの分析のための印ですが、業務のマクロでは「ファイルを開いたら動く処理」「外部のプログラムを呼ぶ処理」「接続先の一覧」にそのまま当たります。 仕様書の「起動のしかた」と「外部とのつながり」の下書きが、ここから作れます。

Excel から取り出す方法を使わないのは、設定を緩めたくないからです。 VBA の拡張オブジェクトモデルには、コンポーネントを別のファイルに保存する Export メソッドがあります。ただし Microsoft のサポート情報によると、Office は自動化のクライアントから VBA のオブジェクトモデルへのアクセスを既定で拒否しており、使うには「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」を有効にする必要があります。この設定は、自己複製するコードを作りにくくするためのものとされています。分析のために多数の端末でこれを有効にするより、ファイルを開かずに読む方法を選びます。

03どうやって実装するのか

Step1

処理の起点を決める

分析用のフォルダにファイルの写しが置かれたことを起点にします。 今月の対象は月初に台帳から選びますが、写しが届く日はばらばらです。届いたものから1本ずつ動かし、月末にまとめて処理することはしません。 利用部門への確認は往復に日数がかかるので、早く出すほど月内に閉じられます。

ファイルが更新されたマクロも、同じトリガーで受けます。 台帳にはファイルのハッシュ値を記録しておき、月に1回、ファイルサーバーの実物と比べます。値が変わっていれば、前の仕様書と並べて差分を見られるように、作り直しの対象にします。

分析用のフォルダは、分析用の端末の中に置きます。 利用部門のファイルサーバーから直接読まず、写しを置いてから処理します。元のファイルには触れません。

Step2

入力データを集める

データ中身取得元
モジュールごとのソース標準モジュール、シートとブックのモジュール、クラスモジュール、フォームのコードolevba の出力
解析の印AutoExec(自動で動く処理)、Suspicious(注意が要る命令)、IOC(URL・ファイル名など)olevba の解析結果
プロシージャの一覧モジュール名、プロシージャ名、開始と終了の行番号前処理で作る
台帳の情報ファイル名、所管の部門、使う頻度、作った人(分かれば)マクロの台帳
利用部門のメモ「月初にボタンを押す」「結果を経理に送る」など、分かっている範囲の使い方写しを受け取るときに聞く
前の版の仕様書作り直しの場合だけ社内のポータル

質を決めるのは、下から2番目です。 コードだけからでも処理の流れは書けますが、「いつ、誰が、何のために」が一言でもあると、AIはそれを手がかりにコードのどこが中心かを見分けられます。 写しを受け取るときに、3行でよいので書いてもらいます。

利用部門のメモは、仕様書の「目的」にそのまま写しません。 メモとコードが食い違っていることがあるからです。AIには、メモとコードが食い違う箇所を「確認する点」に挙げさせます。

Step3

データの取得方法を決める

取るものどこから何に使うか
ソースコードolevba のコードだけを出すオプション(-c)AIに渡す本体
解析の印olevba の解析結果だけを出すオプション(-a)、または JSON の出力(-j)起動のしかた、外部とのつながりの下書き
難読化された文字列--decode で、難読化された文字列を復号して表示接続先や命令が隠されていないかの確認
台帳と前の版マクロの台帳、社内のポータル文脈と、作り直しのときの差分

解析の印は、JSON で受け取ります。 olevba には詳しい結果を JSON で出す -j のオプションがあり、印の種類とキーワードを機械で読めます。 AutoExec に Workbook_Open があれば「ファイルを開くと動く」、IOC にファイルのパスがあれば「このフォルダに依存する」という下書きを、AIに渡す前に作れます。

--decode で文字列が復号されて出てきたら、仕様書を作る前に止めます。 業務のマクロで文字列を難読化する理由はほとんど無く、マルウェアの可能性を先に調べるべきだからです。

Step4

AIへ渡す前に整形する

  1. 形式の確認 … olevba が扱える形式かを確かめます。Access のデータベースなど対象外の形式は、この構成から外します
  2. 難読化・不審な印の確認 … Suspicious に外部のプログラムの実行やダウンロードに当たる命令があり、IOC に社外の URL があれば、仕様書の作成を止めて情報セキュリティの担当に回します
  3. 認証情報らしき文字列を伏せる … Password、pwd、接続文字列、@ を含むアドレスなどに当たる行の値を [MASKED_01] のように置き換え、置き換えた行の番号だけを記録します
  4. 行番号の付与 … モジュールごとに1から行番号を振ります。根拠を行番号で返させるためです
  5. プロシージャの一覧 … Sub、Function、Property の開始と End の行から、プロシージャごとの範囲を作ります
  6. 長さで分ける … 1モジュールが決めた行数を超えるものは、プロシージャの境目で分けて渡します
  7. 文字化けの確認 … 日本語のコメントや文字列が化けていれば、元のファイルの文字コードを確かめて取り出し直します

3番目は、外部へ渡す前の最後の関門です。 業務のマクロには、データベースの接続文字列、共有のメールアドレス、ときにはパスワードがそのまま書かれています。伏せた後の文字列だけをAIに渡し、伏せた値は仕様書にも書きません。 仕様書には「この行に認証情報が書き込まれている」という事実だけを残し、それ自体を改善の候補として台帳に印を付けます。

Step5

AIに処理させる

1回目はモジュールごと、2回目はファイル全体で、AIに読ませます。

回させること根拠の示し方
1回目プロシージャごとの働き(1〜2文)、読むシート・範囲・ファイル、書くシート・範囲・ファイル、呼び出すプロシージャ、使う定数、エラー時の動き各項目に行番号
2回目起動のしかた、起動から終了までの処理の流れ、入力、出力、外部とのつながり、前提、エラー時の動き、確認する点各項目に「モジュール名:行番号」

2回に分けるのは、長いマクロでも行番号を見失わないためです。 数千行を一度に渡すと、処理の流れは書けても、根拠の行番号がずれたり抜けたりします。1回目で細かく根拠を付けておき、2回目はその結果を束ねるので、仕様書の各項目を1回目の行番号までたどれます。

「前提」は、項目を決めて探させます。 決まったシート名や列の位置、決まったフォルダやファイル名、日付や数値の書式、ほかのブックのマクロの呼び出し、Outlook など別のアプリの起動、実行する人の権限。項目を決めずに「前提を書いて」と頼むと、当たり前すぎるものが落ちます。 第3章の(b)は、ここで防ぎます。

させないこと理由
業務上の目的の断定コードには書かれていない。推測は「確認する点」に回す
コードの改善や書き換えの提案仕様書の役目ではない。いまの動きを正確に書くことが先
「不要な処理」の判定使われていないように見えても、月に1回だけ動く処理かもしれない
伏せた値の推測[MASKED] の中身を補わない
存在しないシート名・セルの補完コードに書かれた名前だけを使う

1行目がいちばん起きやすい失敗です。 Sub 月次締め() という名前があれば、AIは「月次の締め処理を行う」と書きます。名前は作った人の当時の意図で、いまの業務と一致している保証はありません。 名前から読んだことは、根拠に「プロシージャ名から」と書かせ、確かめた事実と分けます。

Step6

指示内容を固定する

あなたは情報システム部で、業務で使われている VBA マクロの仕様書を作る立場です。
渡されたソースコードと解析の結果だけを根拠にしてください。

【いまのファイル】{file_name}(所管部門:{department})
【利用部門のメモ】{user_memo}
【解析の印(olevba)】{olevba_flags}
【モジュールごとの要約(1回目の結果)】{module_summaries}

【仕様書の9項目】
1. 目的 ............ 利用部門のメモとコードの両方から書く。食い違いは8へ
2. 起動のしかた .... ボタン、ファイルを開いたとき、ほかのマクロからの呼び出し など
3. 処理の流れ ...... 起動から終了までを、手順の番号付きで
4. 入力 ............ 読むシート・範囲・ファイル・フォルダ
5. 出力 ............ 書くシート・範囲・ファイル・フォルダ、送るメール
6. 外部とのつながり  ほかのブック、ほかのアプリ、ネットワーク上の場所、データベース
7. 前提 ............ シート名・列の位置・フォルダ・書式・権限・起動しているべきアプリ
8. 確認する点 ...... コードからは分からないこと、メモとコードの食い違い
9. エラー時の動き .. エラー処理があるか、どこで止まり、何が書きかけで残るか

【厳守事項】
- すべての記述に、根拠を「モジュール名:行番号」で付けてください。
  根拠が付けられない記述は書かないでください。
- 業務上の目的や理由は、コードから断定しないでください。
  プロシージャ名やコメントから読み取ったことは、basis を "name_or_comment" にしてください。
- コードに書かれていないシート名、セル番地、フォルダ名を補わないでください。
- [MASKED_xx] の中身を推測しないでください。「認証情報が書き込まれている」とだけ書いてください。
- 改善の提案、書き換えの提案、不要な処理の指摘はしないでください。
- 動きが条件によって変わるときは、条件ごとに分けて書いてください。
- 分からないことは、8 の確認する点に、利用部門が答えられる問いの形で書いてください。

「根拠が付けられない記述は書かない」が、この指示の芯です。 仕様書の文章は、すべて行番号まで戻れる状態にします。戻れない文章は、どれほどもっともらしくても仕様書に入れません。

basis を分けさせるのは、確かめ方が違うからです。 処理から読んだことは担当者がコードで確かめられ、名前やコメントから読んだことは利用部門に聞かないと確かめられません。同じ文に見えても、確かめる人が違います。

Step7

出力形式を固定する

次の形のJSONで受け取ります。

{
  "file_name": "",
  "file_hash": "",
  "spec": {
    "purpose": [ { "text": "", "basis": "code | name_or_comment | user_memo", "refs": ["Module1:12-40"] } ],
    "triggers": [ { "text": "", "refs": [""] } ],
    "flow": [ { "step": 1, "text": "", "refs": [""] } ],
    "inputs": [ { "kind": "sheet | range | file | folder | database | other", "name": "", "refs": [""] } ],
    "outputs": [ { "kind": "sheet | range | file | folder | mail | other", "name": "", "refs": [""] } ],
    "external": [ { "kind": "workbook | application | network_path | database | url", "name": "", "refs": [""] } ],
    "assumptions": [ { "category": "sheet_layout | folder | format | permission | running_app | other", "text": "", "refs": [""] } ],
    "error_handling": [ { "text": "", "refs": [""] } ],
    "questions": [ { "question": "", "why": "", "refs": [""] } ]
  },
  "masked_lines": ["Module2:15"]
}

1つ目の理由は、根拠の行番号を機械で確かめられることです。 refs がプロシージャの一覧の範囲に収まっているかを、受け取った側で照合します。範囲の外を指す根拠は、担当者に知らせます。

2つ目は、仕様書の様式に機械で流し込めることです。 構造化出力は、応答をJSONスキーマに沿わせ、output_config.format にスキーマを渡して使います。9項目の並びと、kind や category の値を固定できるので、600本の仕様書の見出しと粒度がそろいます。第3章の(a)は、ここで防ぎます。

3つ目は、マクロどうしを横に並べられることです。 external と inputs が同じ形でたまると、「このフォルダに依存するマクロは何本あるか」「このブックを呼ぶマクロはどれか」を台帳の側で数えられます。 ファイルサーバーの移行や、フォルダの整理の前に、影響の範囲が分かります。

Step8

システムへ連携する

つなぎ先方式内容
分析用の端末フォルダの監視写しの保存を検知し、olevba と前処理を動かす
Claude APIAPI呼び出し1回目と2回目の要約
マクロの台帳Power Automate(書き込み)状態、ハッシュ値、依存するフォルダやブック
利用部門Power Automate(確認の依頼)questions を一覧にして送る
社内のポータルPower Automate(保存)確認を終えた仕様書

台帳への書き込みは、状態と依存関係の列だけです。 「仕様書あり」に変えるのは、利用部門の確認が終わった後です。AIの下書きができた時点で「仕様書あり」にすると、確かめていない仕様書が台帳上は完了に見えます。

元のファイルには何も書き込みません。 仕様書の置き場所をマクロの中にコメントとして足したくなりますが、それは利用部門のファイルを変えることになります。

Step9

人が確認する

  1. 根拠の行番号を開く … 担当者が refs の行を開き、書かれている内容がコードと合っているかを確かめます。特に flow と assumptions は全件見ます
  2. basis が name_or_comment のものを確認する点に移す … コードで確かめられないものは、利用部門に聞く側に回します
  3. 利用部門に聞く … questions を送り、答えを仕様書に書き込みます。作った人が社内にいれば、その人にも送ります
  4. 画面で一度動かしてもらう … 利用部門に、普段どおりの手順で一度実行してもらい、仕様書の flow と合っているかを見ます

4番目は、仕様書を完成させるための最後の確認です。 コードの読みが正しくても、ボタンを押す前に手で貼り付ける作業があった、という手順はコードには現れません。 実際の操作を一度見れば分かります。

Step10

例外に対処する

起きること対応
VBA のプロジェクトが取り出せないファイルの保護や破損を疑い、所管部門に事情を聞く
不審な命令や社外の URL がある仕様書の作成を止め、情報セキュリティの担当に回す
難読化された文字列がある同上。業務のマクロで難読化する理由はほとんど無い
認証情報が書き込まれている伏せて渡し、台帳に改善の候補として印を付ける
ほかのブックのマクロを呼んでいる呼ばれる側のブックも対象に加え、2本まとめて仕様書にする
日本語のコメントが化けている文字コードを確かめて取り出し直す。直らなければ人が読む
1モジュールが極端に長いプロシージャの境目で分けて1回目を回す
根拠の行番号が範囲の外その記述を使わず、該当のモジュールだけもう一度依頼する
利用部門がもう使っていないと答えた仕様書は作らず、台帳に「廃止の候補」と記録する

5行目は、仕様書の単位を決める問題です。 1本のブックのボタンが、別のブックを開いてそのマクロを動かすことがあります。呼ばれる側を読まずに仕様書を書くと、処理の流れが途中で切れます。 external に workbook が出たら、台帳でそのブックを探し、まとめて対象にします。

最後の行も、この構成の成果の1つです。 台帳の600本には、もう誰も使っていないものが混ざっています。確認の問いを送った時点で「もう使っていない」と返ってくれば、そのマクロは仕様書ではなく廃止の手続きに回せます。 一巡にかかる20か月が、そのぶん縮みます。

Step11

記録を残す

  • 元のファイルのハッシュ値と、写しを受け取った日
  • olevba の出力(ソースと解析の結果)と、伏せた行の番号(値は残さない)
  • AIの1回目と2回目の出力の全文
  • 担当者が直した箇所と、利用部門の答え
  • 確認を終えた仕様書の版と、確認した人

1つ目のハッシュ値が、作り直しの判断の材料です。 ファイルが更新されたかは、ハッシュ値を比べれば分かります。仕様書がどの版のファイルについて書かれたかが、いつでもたどれます。

04実装レベルの3段階

最小構成:olevba で取り出したソースを手でAIの画面に貼り、仕様書の下書きを作らせる / 1本ごとの読み取り
半自動化:上記+フォルダの監視から olevba、前処理、2回のAIの要約までを自動にし、仕様書の様式に流し込む / 取り出しから下書きまで
本格構成:上記+ハッシュ値による更新の検知、依存関係の台帳への集約、利用部門への確認の自動の依頼 / 600本の仕様書の維持

本記事の想定は半自動化です。 取り出しから仕様書の下書きまでが自動になり、担当者は根拠の確認と、利用部門とのやり取りに時間を使います。1本120分が36分になります。 本格構成に進むと、仕様書を「作る」から「保つ」に変わります。 ファイルが更新されるたびに差分の仕様書が出て、依存関係が台帳に集まります。台帳の600本が一巡した後に効いてくる段階です。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
4 名
月間件数
30 件
1件あたり現在時間
120 分
1件あたり導入後時間
36 分
現在  30件 × 120分 ÷ 60 = 60 時間/月
導入後 30件 × 36分 ÷ 60 = 18 時間/月
月間削減時間
42h
削減率
70%
年間削減時間
504h
年間金額換算(時間単価4,500円)
227万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 部門ごとに作られた Excel・Word の VBA マクロが数百本単位で業務に組み込まれ、作った人の異動や退職で中身が分からなくなっている企業。情報システム部門がマクロの台帳を持ち、重要度の高いものから毎月一定の本数ずつ仕様書を作る計画を立てられる場合。マクロの置き換えや移行の前に、いまの処理を正確に書き出しておきたい場合。
向いていない
  1. マクロが数本で、作った人がまだ社内にいて説明できる場合。マクロの中に取引先の個人情報や認証情報が直接書き込まれていて、外部のAIサービスに渡す前に取り除く手順を用意できない場合。マクロの改修やほかの言語への書き換えそのものを自動化したい場合(この構成は仕様書を作るまでです)。

07最小構成で試す方法

  1. 台帳から、中身がよく分かっているマクロを5本、分かっていないマクロを5本選ぶ
  2. 分析用の端末で olevba を動かし、ソースを取り出す
  3. 認証情報らしき文字列を手で伏せ、行番号を付ける
  4. 手元のAIサービスにソースを貼り、「処理の流れ、入力、出力、前提を、行番号付きで書いてください。コードから分からないことは確認する点として書いてください」と指示する
  5. 中身が分かっている5本で、出てきた内容が正しいかを確かめる

中身が分かっている5本が、この試験の本体です。 分かっているマクロで正しく書けなければ、分かっていないマクロの仕様書は信用できません。

出てきた内容判断
行番号付きで、知っている動きと合っている分かっていない5本に進み、利用部門に確認する
プロシージャ名から目的を断定している指示の書き方で直る。構成は有効
前提がほとんど出てこない前提の項目を決めて探させる指示に直す

3行目は、最初はよく出ます。 「前提を書いて」だけでは、シート名や列の位置のような当たり前のものが出てきません。項目を並べて探させると、急に出てくるようになります。

08実装時につまずきやすいポイント

問題対策
プロシージャ名から目的を断定するbasis を分け、名前から読んだことは確認する点に回す
前提が仕様書から落ちる前提の項目を決めて探させる
根拠の行番号がずれるモジュールごとに1回目を回し、範囲の外を照合する
認証情報が伏せられずに渡る伏せるパターンを育て、伏せた行の番号を記録して見直す
ファイルを開いて中身を見ようとするolevba で開かずに読む
不審なマクロの仕様書を作ってしまうSuspicious と IOC で止め、セキュリティの担当に回す
ほかのブックを呼ぶ処理が途中で切れる呼ばれる側も対象にし、まとめて仕様書にする
改善の提案が仕様書に混ざる指示で禁じる。いまの動きを書くことが先
利用部門の確認を省く台帳の「仕様書あり」は確認の後にだけ付ける
600本を一度に流す重要度の高いものから毎月30本ずつ。確認の往復が回る量に抑える

上の2行が、仕様書の信用を左右します。 1行目はもっともらしい嘘を、2行目は大事なことの抜けを生みます。どちらも、指示の書き方と出力の形で防げます。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: マクロのソースコード、そこに書き込まれたフォルダのパス、サーバー名、メールアドレス、場合によっては接続文字列やパスワードです。AIに渡すのは、認証情報らしき文字列を伏せた後のソースだけです。

  1. マクロを動かさない … 分析はファイルを開かずに行います。Excel の「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」を、分析のために有効にしません。 既定で拒否されている理由は、自己複製するコードを作りにくくするためです
  2. 伏せてから渡す … 接続文字列やパスワードは、外部のAIサービスに渡す前に伏せます。伏せた値は、仕様書にもログにも残しません
  3. 不審なマクロは、仕様書より先に調べる … olevba の印は、もともとマルウェアの分析のためのものです。業務のマクロに見えても、社外の URL への通信や外部のプログラムの実行があれば、先に情報セキュリティの担当が見ます
  4. データの保持を確認する … Claude の公式ドキュメントでは、保持されたデータは明示の許可なくモデルの学習に使われないとされ、ゼロデータ保持の取り決めもあります。一方で、Batch API や Files API はゼロデータ保持の対象外とされています。月30本を夜間にまとめて流したくなっても、対象外の機能を使うかは社内の基準と照らして決めます
  5. 仕様書の公開範囲を決める … 仕様書には、フォルダの構成やサーバー名が書かれます。社内のポータルでも、閲覧できる人を所管部門と情報システム部に限ります

誤りが起きた場合のリスクは、仕様書が実際の動きと違っていて、移行や改修の判断を誤ることと、認証情報が外へ出ることの2つです。 前者は根拠の行番号と利用部門の確認で、後者は前処理で防ぎます。

10まず何から始めるか

1週目:仕様書の項目を決める

9項目と、前提として探す項目(シート名・列の位置、フォルダ、書式、権限、起動しているべきアプリ)を決めます。認証情報らしき文字列の伏せ方も、情報セキュリティの担当と決めます。

2週目:10本で試す

台帳から中身が分かっているもの5本と分かっていないもの5本を選び、olevba で取り出し、手元のAIサービスで仕様書の下書きを作らせます。分かっている5本で、行番号付きの記述が正しいかを最優先で見ます。

3週目:前処理を作る

伏せる、行番号を振る、プロシージャの一覧を作る、の3つをスクリプトにします。伏せ漏れが無いかを、10本で確かめます。

4週目:2回の要約をつなぐ

フォルダの監視から olevba、前処理、1回目と2回目の要約、仕様書の様式への流し込みまでをつなぎます。この時点では台帳を自動で更新せず、担当者が下書きと根拠を見比べます。

2か月目: 利用部門への確認の依頼と、台帳への依存関係の書き込みを足し、月30本を回します。3か月目以降: ハッシュ値による更新の検知を足し、1本120分が何分になったかを実測します。依存するフォルダとブックが台帳で数えられるようになった時点で、この構成は完成です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-10-07/最終更新:2026-10-07
確認した内容情報源確認日
olevba が Office の文書から VBA マクロを検出し、マクロを実行せずにソースを平文で取り出し、セキュリティに関わるパターンを検出すること。対応形式(.doc/.dot/.docm/.dotm/.xls/.xlsm/.xlsb/.ppt/.pptm/.ppsm など)。-c(ソースだけ)、-a(解析だけ)、-j(JSON)、--decode(難読化文字列の復号)のオプション。AutoExec/Suspicious/IOC の印oletools wiki: olevba2026-10-07
Export メソッドがコンポーネントを別のファイルとして保存すること。既に存在するファイル名を指定するとエラーになることMicrosoft Learn: Export method (VBA Add-In Object Model)2026-10-07
Office が自動化のクライアントからの VBA オブジェクトモデルへのアクセスを既定で拒否し、ユーザーごと・アプリごとの設定であること。トラストセンターの「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」で有効にすること。自己複製するコードを作りにくくするための設定であることMicrosoft Support: Programmatic access to Office VBA project is denied2026-10-07
構造化出力が output_config.format で応答をJSONスキーマに沿わせることClaude Docs: Structured outputs2026-10-07
保持されたデータが明示の許可なくモデルの学習に使われないこと。ゼロデータ保持の取り決めがあり、Batch API や Files API が対象外であることClaude Docs: API and data retention2026-10-07

マクロの改修・移行・廃止の判断は、所管部門と情報システム部で行ってください。 本記事は製品とツールの公開情報で確認できた範囲だけを扱っています。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-0656)についてのご相談はこちらから。

AI活用について相談する
目次