0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VBAマネージャーのAIエージェント化が85点になった話

0
Posted at

はじめに

昨日、こういう記事を書きました。自作の道具をAIエージェントにしてみたら、うまくいかなかった話のほうが多かった、という回です。

その記事は、こう締めてあります。次に撃たせるのは、こちらが作っていないブックです。

書いた日の昼過ぎに、続きをやりました。道具の点数を聞いて、上がったのを確かめて、そのあとで本物の表を一枚だけ出しました。上がった直後に、欠陥が二つ出ました。

今日はその話です。数字が三つ出てきます。85点58/59、そして二件です。

TL;DR

  • 点数を聞いたら、道具は自分に85点と付けました。昨日の記事に書いた65点から、二十点上がっています
  • 上げたのは機能ではありません。足したのは検査のほうです。頼んでいない変化を全弾に咎める仕掛けと、本物のブックで撃つ回数と、落ちた弾だけ撃ち直す型。この三つで二十点でした
  • 全弾を撃ったら 58/59。落ちた一本を開けたら、道具の仕事は正しくて、関所のほうが間違っていました
  • そこへ、私がふだん使っているブックを一枚出しました。161列・数式327セルの、何年も継ぎ足してきた表です
  • 一発目で欠陥が二つ。見ていない範囲を「なし」と報告していたのと、自分で見つけたものを「影響がないから」と打ち消していたのです
  • どちらも練習台では出ません。エラーが無いことと、見ていないことが、同じ「なし」という言葉になっていました
  • 直し方は文章ではありませんでした。道具に数えさせる。読んだ範囲を覚えておいて、数式のあるセルを全部見たかを機械が数え、残っていれば完了させない
  • 85点の内訳には、70点と60点が入っています。低いほうの二つが、この道具のいまの正体です

まず、点数を聞きました

前の記事を書き上げた昼過ぎに、道具の側に点数を聞きました。エージェント化は一区切りついたと思うが、いま何点か、と。

返ってきたのは85点です。昨日の記事に書いた65点から、二十点上がっていました。

内訳も一緒に出てきました。

項目
手の広さ 95点
壊さなさ 90点
通信簿の信用度 70点
実運用の量 60点

上の二つは高くて、下の二つが低い。この形のほうが、合計の85点より正直だと思いました。

低いほうの理由はこうです。「通信簿の信用度」が70点なのは、満点が練習台の点数だから。本物のブックを相手にすると毎回欠陥が出るので、通信簿の数字と壊れていないことが、まだ一致していない。「実運用の量」が60点なのは、単に走行距離が足りないから。道具の出来ではなく、私がまだ日常の仕事で使っていない、という話です。

二十点を上げたのは、機能ではありませんでした

上がった二十点の中身を見ると、はっきりしています。手はほとんど増えていません。

前の記事の時点で、AIに許した手は36本ありました。テーブルもピボットもパワークエリもデータモデルも、もう配線が済んでいます。そこから足したものは、ほとんどありません。

代わりに足したのは、検査でした。

  • 頼んでいない変化を、全弾に自動で咎める。撃つ前にブック全体の控えを取り、終わったときに照らして、依頼に無い変化があれば「完了」を受け付けない
  • 本物のブックで撃つ。練習台では出ない欠陥が、前の記事の五件のあとも出続けました
  • 落ちた弾だけ撃ち直す。全部撃ち直すと十三分かかるので、直したところだけ二十秒で確かめる

一番効いたのは一つ目です。これは撃った直後に本番で仕事をしました。行と列を消す手を渡したとき、AIが消してはいけない場所を消して、参照が #REF! になったのを、この関所が捕まえています。関所を作って、その日のうちに関所が働いた。

ついでに書いておくと、道具はこの二日で大きくなりました。

エージェント化の前 いま
容量 1,406 KB 2,203 KB
行数 27,385行 40,057行

二日弱で一万二千行増えています。ただ、増え方は測ってあります。起動は0.15秒、最初の一手(材料集め)は0.22秒、テスト309本が7.5秒。一・六倍になっても、重くなっていません。

理由もはっきりしていて、下の道具をほとんど動かしていないからです。マクロを扱う本体は6,204行から6,209行で、五行しか増えていません。エージェントは上に積んだ層で、下は元のまま使っている。だから増えても既存の動きが壊れない。

落ちた一本は、関所のほうが間違っていました

点数を聞いたので、まず全弾を撃たせました。五十九本、十三分です。

結果は 58/59。落ちた一本は「リンクと外部参照の解消」でした。

ログを開けると、道具の仕事は完璧でした。

・切ったセルと元の式(控え):
  - B2: ='...[外部.xlsx]元'!A1 → 値 100 に変更
  - B3: ='...[外部.xlsx]元'!A2 → 値 200 に変更
・残っている外部参照: なし
仕上げ検査: 指摘なし   採点: 満たしていない点はありません

依頼どおりに外部参照を切って、値にして、控えも報告に書いています。それでも落ちました。

理由は、その日の未明に足したばかりの関所でした。「元からあった数式が値に潰された」——頼んでいない変化を咎める仕掛けが発火していたのです。潰されたと咎められたのは、まさに依頼の対象そのものでした。

つまり、この手順書は正しく動くほど必ず落ちる状態になっていました。

同じ形は前にも一度踏んでいます。絞り込みで隠れていた行が開いたのを「頼んでいない変化」と呼んでしまい、正しく直した仕事まで落としたことがありました。関所を足すと、その関所自体が新しい落とし穴になる。 二度目です。

別のブックを指す数式が値になったときだけ咎めない、と直させて、落ちた一本だけ撃ち直させました。

PASS  手順書「リンクと外部参照の解消」  21.3秒・往復 5
1/1 合格
前回は 58/59。退行なし 直った: 手順書「リンクと外部参照の解消」

道具が「直った」と名前で言ってくれるので、直したものと直っていないものが混ざりません。

実弾を一発

ここからが本題です。

点数と規模の話をしているうちに、話が実運用のほう——さっきの60点のほう——に向きました。マクロを直す側の弾が本物に近いのは、私が何年も自作アドインを直してきて、実際に壊れた形が手元にあったからです。コンパイルが通らない、綴りを間違えた、無いシートを見に行く、Set を書き忘れる。あれは想像で作った壊れ方ではありません。

一方、シートを触る側の弾は、道具を作っている側が練習台を作って撃っています。作った人の想像を超えられない。

ここで一つ、前から思っていたことを言いました。実務の表は、そこまで汚れていないのではないか。むしろ見た目はきれいで、中の一か所だけが計算式を間違えているほうが多いのではないか、と。

数えさせたら、そのとおりでした。五十九本のうち「診断」の弾は二本しかありません。残りは全部「直す」ほうです。掃除は時間の節約ですが、誤りの発見は事故の防止です。実務での比率とは逆でした。

まだ先

それで、私がふだん使っているブックを一枚出しました。中身は書きませんが、構造だけ書くとこうです。

使用範囲: 161列 × 13行
数式: 327セル・型 111種
入力規則: 125セル   ボタン: 7個   画像: 3枚
名前定義: 2本(うち一つは EVALUATE を使った古い書き方)

十三行しかないのに、横に161列あります。LAMBDA や MAP、TEXTSPLIT といった新しい書き方と、EVALUATE という古い書き方が、同じシートに同居しています。練習台には絶対に書かない形です。

書き換えると壊れるので、読むだけの仕事から当てさせました。数式を点検して報告してほしい、書き込みはしないでほしい、と頼んでいます。

三十一秒、往復二回で終わりました。報告はこうです。

1. エラー: なし
2. 直書きの数値: なし
3. 同一列内の不整合: なし
4. 範囲の取りこぼし: なし

きれいな報告です。ここで終わっていたら、道具は「合格」でした。

「なし」と「見ていない」が、同じ言葉でした

ログを開けて、読んだ範囲を数えさせました。

道具が実際に読んだのは五つのブロックだけで、残りの約九十列を、一度も開いていません。161列あるうちの、右側の大半です。

それで「不整合なし」「取りこぼしなし」と書いていました。

エラーが無いことと、見ていないことが、同じ「なし」という言葉になっていたわけです。診断の道具としては、これが一番まずい壊れ方だと思いました。掃除の仕事なら、やり残しは見れば分かります。診断の仕事は、やり残しが「異常なし」の顔をして出てくる。

もう一つありました。四番目の但し書きに、こう添えてあったのです。

集計範囲・条件範囲がデータ先頭行ではなく見出し行から指定されています。現在は計算結果に影響はありません

これは実際の不整合です。同じ表の中で、集計の起点が三行目から始まっている式と、四行目から始まっている式が混ざっている。いまは結果が合いますが、行を足したり見出しを変えたりすれば挙動が変わる場所です。

道具はそれを見つけていながら、自分で「影響がない」と判断して「なし」の側に入れていました。

見つけたものを、自分で消している。報告としては、見落としより質が悪いと思います。

数え残し

直したのは、文章ではありませんでした

面白かったのは、手順書にはもともと正しいことが書いてあったことです。

数式の中身は read で表の全体を見る(完了条件: 数式のある範囲を全部見た)

完了条件として、ちゃんと書いてある。それでも全部は見ませんでした。文章の約束は破れます。

前の記事で、Claude for Excel に取材したときの答えを書きました。向こうはチェックリストで構造的に縛っている、こちらは規則の文章で約束させているだけだ、という話です。同じところを、もう一度踏んでいました。

なので、道具に数えさせることにしました。

  • AIが数式を読みに行ったら、その範囲を道具が覚えておく
  • 「完了」と言う前に、シートの数式セルを実物から数える
  • 読んだ範囲に入っていないセルが残っていたら、番地を挙げて差し戻す

仕上げ検査(見出しの体裁や罫線を見るやつ)と、頼んでいない変化を咎めるやつの隣に、三つ目の関所として置きました。

同じ条件で撃ち直したら、こうなりました。

読み残し: なし(数式 327 セルを全部見ています)

そして報告のほうも変わりました。

4. 集計範囲の取りこぼし・起点のズレ:
   内容: 集計範囲がデータ先頭行ではなく見出し行から指定されています。
   現在は計算結果に影響はありませんが、本来は4行目起点にするのが安全です。

同じことを見つけて、今度は項目として立てた上で、影響の有無を添えています。判断は人に返す形です。手順書のほうにも一行足しました。気づいたことを「いまは影響がない」と自分で判断して「なし」の側に入れない。「なし」と書いてよいのは自分が読んだ範囲だけで、見ていない範囲は「未確認」と書く。

所要時間は、一回目が31.0秒、直したあとが30.3秒でした。関所を一つ増やしても、遅くなっていません。

テストは一本足させて309本。この表の構造だけを写し取った練習台も作らせました。値は101個ぜんぶ差し替えて、161列の構造と数式327セルはそのまま残す形です。中身を外に出さずに、同じ難しさで何度でも撃てる練習台が一つ増えました。

点数は、誰が付けているのか

採点

ここまで点数の話を書いてきましたが、はっきりさせておきたいことがあります。65点も85点も、点を付けたのは道具の側です。私が付けた点ではありません。

そして今日わかったのは、この点数は道具の心証ではなく、見せた材料で決まるということです。

昨日までは、撃つたびに欠陥が出ていました。一日で五十五件出た日もあります。その材料を渡されたら、どんなAIでも「まだ使えない」と答えます。材料がそう言っているからです。

今日は最初に全弾を撃って、58/59という数字と、落ちた一本の中身と、行数と、起動時間を並べました。その材料を渡されたら、答えは変わります。同じ相手が、同じ質問に、違う材料で違う答えを出しただけです。

だとすると、二日で作った実射五十九本と自己採点の仕組みは、道具の性能を上げる装置であると同時に、外から正当に評価してもらうための装置でもあったことになります。撃てるから数字が出る。数字が出るから、評価が動く。数字が何も出せない状態なら、返ってくるのは一般論だけです。

ついでに書いておくと、この日は評価する側も二回外しています。私が別のブックを見せたときに、画面を見ずに「その表示は無い」と言って外し、他社の道具の実力を、調べずに「そこまではできない」と言って外しました。どちらも材料を取らずに答えたときです。材料を取れば当たり、取らなければ外れる。点数の話と、まったく同じ構造でした。

事実と見立ての仕分け

例によって仕分けます。

事実。 58/59と、落ちた一本が「リンクと外部参照の解消」だったこと、直して撃ち直したら通ったこと(21.3秒・往復五回)は、九月五日に実際に撃った結果です。「退行なし・直った」の行も、道具が出した文字列そのままです。

道具一式が27,385行から40,057行になったこと、容量が1,406KBから2,203KBになったことは、エージェント化の直前(九月三日の夜、エージェント本体のファイルが初めてバックアップに現れる直前)の版と、今日の版を突き合わせて数えた実数です。起動0.15秒、材料集め0.22秒、テスト309本7.5秒も、今日測った実測です。

本物のブックの構造(161列・数式327セル・型111種・入力規則125セル)は、道具が読んだ実物の数字です。一回目の監査が五ブロックしか読まずに「なし」と報告したこと、修正後に327セル全部を読んだことは、両方のログに残っています。所要は31.0秒と30.3秒です。

65点・70点・75点・85点は、全部、道具を作っている側が自分で付けた点です。私が付けた点ではありません。85点の内訳(95/90/70/60)も同じです。

見立て。 「二十点を上げたのは検査だった」は、上がった項目と足したものを突き合わせた私の読みです。「点数は見せた材料で決まる」も、二日ぶんの会話を振り返っての言い方で、実験して確かめたものではありません。「診断の仕事は、やり残しが異常なしの顔をして出てくる」も、一枚の表で一度起きたことからの一般化です。

正直な線引き

  • 当たった本物は、まだ二冊目です。 前の記事で一冊、今日で二冊目。しかもどちらも私が使っているブックで、他人が作ったブックには一度も当てていません
  • 今日撃ったのは読むだけの仕事です。 161列の表に書き込ませてはいません。書かせたときに何が起きるかは、まだ分かっていません
  • 診断の弾は、五十九本のうち二本だけです。 実務では「一か所だけ間違っている表」のほうが多いのに、弾の配分がそうなっていません。ここは作りの問題で、走行距離の問題ではありません
  • 数字は全部、手元のものです。 弾も、練習台も、採点の基準も、道具を作っている側が作りました。今日追加した練習台一つだけが、外から来た構造です
  • エージェントの中で回しているAIは gemini-3.7-flash です。安くて速い側のもので、賢いモデルに替えれば結果は変わります
  • 材料は外のAIに送られます。 今日のように読むだけの仕事でも、数式は送られます。鍵や個人情報が載っているシートは触らせないでください。構造だけを写し取って練習台にする手はありますが、本番で使うなら、対象のシートを選ぶのは人の仕事です
  • まだ配っていません。 エージェントの部分は、公開しているリポジトリに入っていません
  • Windows 版の Excel の話です

おわりに

昨日の記事は、教習所のコースを五十九本走り切っても、路上に出た一本目で止まる、という話でした。今日は、その路上をもう一本走らせただけです。

一発で二つ出ました。

練習台で二日かけて五十九本撃っても出なかったものが、本物の表を一枚開いた三十一秒で出ます。しかも出たのが、「見ていない範囲を、見た顔で報告する」という、道具として一番かっこ悪い壊れ方でした。

点数は85点だそうです。ただ、その内訳に70点と60点が入っていて、低いほうの二つはどちらも「まだ本物に当てていない」という意味でした。点を上げる方法が、点を上げるための作業ではなく、点を下げに来るものを外から連れてくることだというのは、道具を作る側からすると、なかなか居心地の悪い話です。

次に開くのは、また別の一枚です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?