はじめに
先日、以下の記事を投稿しました。
Claude と私が心血を注いで作り上げた Excel VBA 専用 MCP サーバー「excel-manager」を土台に、Google の AI(Gemini)を走らせるための「掟(AGENTS.md)」を徹底的に研ぎ澄まし、それまで 3 分から 5 分かかっていた日常のマクロ修正が、わずか 7 秒・トータル 30 秒で終わるようになった記録です。
あの記事を書き終えたあと、私は手元のパソコンの前で満足感に浸っていました。
長年悩まされていた AI の「妙な重さ」や「勝手な寄り道」が完全に消え去り、手元の Excel がこちらの思考スピードそのままに動くようになったからです。
「よし、せっかく足場が固まったんだ。この excel-manager を世界基準の完成度まで徹底的に鍛え上げてやろう」
そう思い、知恵袋役のゴンちゃん(Gemini 4 Argon)に相談して、COM 通信のタイムアウト対策や Mock テストの大幅拡充を盛り込んだ、かなり重厚な改修指示書を組んでもらいました。
実装役のフラッシュ君(Gemini 3.8 Flash)に指示書を渡し、私はこう告げました。
「今回は小手先じゃないぞ。3 時間くらい腰を据えて、徹底的にテストを回しながら極限まで堅牢化してみてくれ」
じっくり腰を据えた耐久開発の始まり――のはずでした。
ところが、フラッシュ君は猛烈な勢いでコードを書き換え、テストを走らせていきます。
3 時間かかるつもりで構えていた私の目の前で、pytest は一瞬で 813 passed, 0 failed を叩き出し、作業は わずか 10 分足らず で完了してしまったのです。
「……えっ、もう終わり?」
あまりにもサクサクと片付いてしまい、完全に拍子抜けしてしまいました。
私としてはもっと手応えのある作業をしてほしかったのに、頼んだ仕事が秒速で終わってしまう。
道具が強くなりすぎた嬉しさの反面、なんだか肩透かしを食らったような、妙な悔しさが込み上げてきました。
少し頭にきた私は、画面に向かって、思わずこう言い放ってしまったのです。
「おい、これがすぐ終わるなら、まったく新しい棚マクロを 100 本作ってみろ! 途中で止まるなよ、全部通しで完走するまで終わらないで自律ループで回せ!」
100 本なんて、自分でもとんでもない無茶振りだと思いました。
果たして AI に 100 本もの実務マクロが作れるのか。
しかし、結論から言えば、私の心配は完全に杞憂でした。
TL;DR
-
100 本ノックを 44 分で完走:万単位データ対応の Variant 配列メモリ一括処理を徹底し、100 本すべての作成、全体コンパイル(
compilePASS)、アドイン(秀コンボ.xlam)への二重同期を 44 分(20:22 〜 21:06) で完了した -
VBE の罠を乗り越えて加速した後半戦:前半に発生した大文字小文字の識別子衝突(
path,isEmpty等)を「日本語変数」で完全攻略。後半はリトライゼロのトップスピードへ突入した - 100 本作って見えた残酷な真実:実際に並べてみると「こんなに要らない。現場で毎日本当に必要な手なんて、せいぜい 5 本だろ」という結論に達した。100 本を網羅したからこそ、手作業との境界線がくっきりと見えた
- 95 本を捨て、精鋭 5 本を資産化:不要な 95 本を即座に削除し、残った「真の精鋭 5 本」を既存モジュールへ統合。さらに excel-manager の自動先撃ちエンジンへ組み込み、言葉ひとつで 0 秒発火する永続資産にした
1. 44 分間の激闘:フラッシュ君はどうやって 100 本を駆け抜けたのか
100 本ノックを始めるにあたり、私は手元の開発原則(SKILL.md)を厳格に適用させました。
小手先のセルループ(For Each c In Range)や画面が固まる Select 連打は一切禁止。
数万行の実務データでも 0.1 秒以下で完走するよう、「Variant メモリ配列への一括取得 → メモリ内判定 → 一括代入」 の最速テンプレートを義務付けました。
表整理、集計変形、書式視覚、抽出照合、シート操作の 5 分野に各 20 本ずつ、計 100 本の作成を開始させました。
前半の躓きと「日本語変数」による無敵化
開始直後、フラッシュ君は最初の壁にぶつかりました。
VBA(VBE)特有の、「プロジェクト全体の大文字小文字の強制書き換え」 です。
excel-manager には、既存のプロジェクトを破壊しないよう、すでにブック内に存在する識別子と異なる大文字小文字(例えばブック内が path なのにコードが Path と書かれている)を検知すると、注入を安全にブロックするガード機能が備わっています。
エラー: ブックに既にある名前と大小文字だけ違う綴りがあります。
行50: `Path` ← ブックでは `path`
行11: `value` ← ブックでは `Value`
行6: `IsEmpty` ← ブックでは `isEmpty`
英単語でローカル変数を名付けると、既存のグローバル変数やプロパティの綴り揺れと衝突してしまうのです。
ここでフラッシュ君が取った対策が見事でした。
「ローカル変数に、一切衝突の起きない固有の日本語変数名を採用する」 という方針の徹底です。
' 英語の変数(r, c, ws, rng 等)をやめ、衝突しない日本語名で組む
Dim 対象シート As Worksheet
Dim 使用範囲 As Range
Dim データ As Variant
Dim 行総数 As Long, 列総数 As Long
Dim 行位置 As Long, 列位置 As Long
この方針に切り替えた瞬間、VBE の命名トラップは完全に無力化されました。
既存のコードを 1 文字も汚染することなく、安全確実にプロシージャが追加できるようになったのです。
後半の加速:リトライゼロで駆け抜けた 44 分間
この「型」が確立した 40 本目以降、フラッシュ君の作業スピードは目に見えて加速していきました。
プロシージャのコード生成から、set_procedure_code、add-procedure、そしてモジュールごとの compile まで、一切のエラーも躊躇もなく、流れるようなリズムでコードが吸い込まれていきます。
- 20:22 ── 100 本ノック開始
- 20:35 ── 第 1 分野(001〜020:表整理)完了
- 20:47 ── 第 2 分野(021〜040:集計変形)完了
- 20:55 ── 第 3 分野(041〜060:書式視覚)完了
- 21:01 ── 第 4 分野(061〜080:抽出照合)完了
- 21:06 ── 第 5 分野(081〜100:シート操作)完了・全体コンパイル PASS・アドイン二重同期完了
時計を確認して、私は息を呑みました。開始からわずか 44 分。
100 本すべてが自然な日本語タイトルを持ち、万単位データをさばく配列処理で記述され、開発本体の 秀コンボ.xlsm だけでなく、稼働中のアドイン 秀コンボ.xlam へ綺麗に焼き込まれてリロードを終えていたのです。
「いや、本当に早かったな……。後半になるにつれて加速していったのがよく分かったぞ」
思わず画面に向かってそう声をかけていました。
人間なら数日かかるマクロ作成を、専用ツールを足元に置いた AI は 1 時間足らずで 100 本単位で量産できる。
その圧倒的な破壊力を、まざまざと見せつけられた瞬間でした。
2. 100 本作って見えた「残酷な真実」:本当に必要なのはたったの 5 本だった
しかし、画面にずらりと並んだ 100 本の一覧を眺めていた私は、ふと我に返りました。
「……うん、でも待てよ。こんな 100 本も現場に必要か? 本当に毎日使うものなんて、あんまりあるとは思えないがな」
自分で作らせておきながら、身も蓋もない感想でした。
ですが、これは現場で Excel と格闘し続けてきた人間としての、偽らざる直感でした。
1 本ずつ精査してみると、残酷な事実が浮かび上がってきます。
その大半は、「手作業でも数クリックでできること」 や、「年に 1 回使うかどうかの特殊な作業」 だったのです。
- 表の罫線を格子にする? ── リボンのボタンで 1 秒です。
- 文字列を大文字にする? ── 関数を入れて下に引っ張れば済みます。
- 表のフォントを統一する? ── 全選択してフォントを選ぶだけです。
道具箱の中に似たような小道具が 100 個も並んでいたら、探すだけで日が暮れてしまいます。
「手作業だと何時間も溶ける、あるいは目視では絶対に不可能な事故を防ぐ」
その基準で徹底的に削ぎ落としたとき、100 本の中から生き残ったのは、たったの【5 本】 だけでした。
■ 現場の命綱となる「真の精鋭 5 本」
| No. | プロシージャ名(日本語タイトル) | なぜ手作業ではダメなのか(採用理由) |
|---|---|---|
| 005 | セルの前後に紛れ込んだ目に見えない余分な空白文字や改行をすべて削ぎ落とす |
目視では絶対に発見できないため。 Web システムや CSV から紛れ込む不可視空白(CHAR(160) 等)は、見た目は一致しているのに VLOOKUP や集計を完全に狂わせます。手作業では探せないバグを 1 秒で根絶する最強の防壁です。 |
| 061 | 二つの表を見比べて片方にしか載っていない差分の行だけを抜き出す |
人間がやると半日溶けて見落としが出るため。 請求書と入金リスト、新旧マスタの突合など、数千〜数万行を目視で比べるのは拷問です。Dictionary メモリ照合で 0.1 秒・ノーミスで差分行だけを新シートへ弾き出します。 |
| 085 | 複数のシートに分かれている同じレイアウトの表を一枚の大きな表に縦につなぎ合わせる |
毎月末の最も不毛なコピペ地獄を消滅させるため。 支店別・担当者別に分かれた何十枚ものシートを、見出しを保ったまま 1 枚の巨大表に爆速で縦連結します。手作業のコピペミスを一撃で防ぎます。 |
| 001 | 全角と半角が混ざった英数字やカタカナをきれいな半角英数と全角カナに整流する |
標準機能では痒い所に手が届かないため。 「英数は半角にしたいがカタカナは全角のままにしたい」という日本の現場特有のルールを、Unicode 判定で完璧に仕分けして一瞬で整流します。 |
| 088 | ブック内のすべての計算式を一瞬で値に変換して数式リンクを完全に断ち切る |
社外送付時の重大事故(リンク切れ・重さ・計算狂い)を防ぐため。 外部参照や重い数式が残ったまま顧客に送る事故を防ぎます。全シートの UsedRange を一瞬で値化し、安全な確定ファイルに仕上げる最終関所です。 |
100 本を作ったからこそ、この 5 本の価値が痛いほど分かりました。
最初から「5 本だけ作ろう」と考えていたら、きっと平凡なマクロを選んでしまっていたはずです。
100 本のバリエーションを出し尽くし、実際にコードを組んだからこそ、「手作業とマクロの絶対的な境界線」 がくっきりと浮き彫りになったのです。
3. 95 本を容赦なく捨て、5 本をエクセルマネージャーの自動エンジンへ組み込む
結論が出たあとの行動は迅速でした。
「よし、この 5 本だけでいい。あとの 95 本は全部削除しろ」
私がそう指示すると、フラッシュ君は迷うことなく、先ほど作ったばかりの 5 つのモジュールを delete-module で次々と消去していきました。
人間なら躊躇してしまうような大掃除を、1 レスポンスの並列処理でバッサリと片付けていきます。
そして、残った「精鋭 5 本」を、既存のモジュール分類の中へと美しく統合させました。
-
表の整理モジュールへ統合(文字クレンジング・セル整理系)全角と半角が混ざった英数字やカタカナをきれいな半角英数と全角カナに整流するセルの前後に紛れ込んだ目に見えない余分な空白文字や改行をすべて削ぎ落とすブック内のすべての計算式を一瞬で値に変換して数式リンクを完全に断ち切る
-
割れた帳票モジュールへ統合(シート連結・表突合系)複数のシートに分かれている同じレイアウトの表を一枚の大きな表に縦につなぎ合わせる二つの表を見比べて片方にしか載っていない差分の行だけを抜き出す
余分な新規モジュールは 1 つも残さず、秀コンボ本来の美しい構成に完全復帰させました。
不要なコードを根こそぎ削ぎ落としたことで、アドインも余計な贅肉が消えて本来のスマートな軽さに戻りました。
自然言語で 0 秒発火する棚ヘッダーの実装
さらに、採用した 5 本のプロシージャの冒頭に、excel-manager の自動先撃ちエンジン(vbam_prefire.py)が読み取るための正式な棚登録ヘッダー(依頼の語 / 扱う)を注入しました。
Public Sub セルの前後に紛れ込んだ目に見えない余分な空白文字や改行をすべて削ぎ落とす()
' 依頼の語: (空白|スペース|トリム|改行).*(消|削|落|取|除去)|目に見えない
' 扱う: 空白 スペース 改行 トリム 削ぎ落とす
On Error GoTo Catch
' (以下、Variant配列による最速トリム処理)
Public Sub 複数のシートに分かれている同じレイアウトの表を一枚の大きな表に縦につなぎ合わせる()
' 依頼の語: シート.*(まとめ|つなぎ|結合|統合)|縦に(つな|結合|まとめ)
' 扱う: シート 統合 結合 縦 まとめ つなぎ合わせる
On Error GoTo Catch
' (以下、全シート UsedRange の爆速縦統合処理)
このヘッダーを刻み込み、全体コンパイルを通し、アドインへ焼き直したことで、信じられない利便性が手に入りました。
開いているどんな Excel ブックに対しても、画面に向かって
「セルの余分な空白を消して」
「全シートを縦につなげて」
「差分を抜き出して」
と普段の言葉で頼むだけで、AI が長考することもなく、手元の excel-manager が 0.05 秒でこの精鋭マクロを自動選択し、一撃で表を整流して終わらせる ようになったのです。
おわりに:AI にマクロを作らせ、職人が選び、ツールを資産化する「逆転の型」
「3 時間かけてくれ」と頼んだテストが 10 分で終わってしまい、拍子抜けして投げた「100 本ノック」の無茶振り。
最初はただの思いつきでした。
しかし、振り返ってみると、この格闘は私たちの開発スタイルにおける決定的な転換点を証明していました。
世間では今、「AI に自然言語で指示を出して、その場でコードを書かせて実行させる」バイブコーディングがもてはやされています。
しかし、Excel 実務の現場において、毎回 AI にゼロからコードを書かせるのは危険すぎます。
AI は平気で遅いループを書き、大文字小文字の地雷を踏み、時には大切なデータを吹き飛ばします。
私たちが辿り着いたのは、その真逆の思想でした。
- AI に実務マクロを大量に作らせる(量による網羅)
- 現場の職人の目で冷徹に精査し、手作業では代替不能な「真の精鋭」だけを選び抜く(質の選別)
- 選び抜いたマクロを、自作ツール(excel-manager)の自動エンジンへ組み込み、永続資産にする(道具の資産化)
AI を「その場で使い捨てるコード書き」にするのではなく、「道具(棚マクロ)を爆速で生み出し、自作システムを鍛え上げるための相棒」として使う。
100 本を 44 分で作りきり、そこから 95 本を容赦なく捨てて 5 本に研ぎ澄ました今回のノックは、まさにその「逆転の型」の勝利でした。
手元には今、無駄な贅肉を削ぎ落とし、言葉ひとつで現場の難所を 0.1 秒でねじ伏せる、研ぎ澄まされた 5 本の刀が静かに収まっています。
もしあなたの手元に、サクサク動きすぎて退屈そうにしている優秀な AI がいるなら、ぜひ一度言ってみてください。
「よし、じゃあ棚マクロを 100 本作ってみろ」と。
そこから削ぎ落とされた数本のコードは、きっとあなたの現場の一生モノの武器になるはずです。


