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を直す」仲間を探していたら、VBAを憎む天才に行き当たった話

0
Posted at

いつもの問い

ほぼ毎日、私はAIにこう尋ねるのが癖になっています。

「私みたいに、ExcelのVBAを"会話で直す"ようなことをやっている人、他にいるんじゃないか?」

これまでは、あまり出てきませんでした。Excelを自動化するツールなら山ほどあります。でも「開いたままのブックのVBAを、AIと会話しながら、その場で鍛える」── そういう手触りの話は、なかなか引っかかってこなかったのです。

ところが今回、同じ問いを投げてみたら、候補がぞろぞろ出てきました。理由は掘ってみてはっきりしました。この界隈の道具は、その大半が 今年の2月から3月にかけて、一気に生まれていた のです。ちょっと前に空振りしていたのは、探し方が下手だったからではなくて、まだ世の中に無かったから。畑に、急に苗が生えてきた ── そんな感覚でした。

私と同じ Python で VBA を触っている方も、お二人見つかりました。同じ言語、同じCOMという土台で、それでも三者三様。並べてみて分かったのは「作ること自体は、そんなに難しくない」ということでした。お二人とも短い期間できれいに形にして、公開して、そこで手が止まっているように見えました。本当の勝負は作った先 ── 毎日使い続けて育てていけるか ── のほうにあるのだろう、と。この時点では、少しいい気になって考えていました。

もう少し掘ったら、とんでもない人が現れた

Qiita画像04_犯人はヤス.png

ところが、もう少し深く掘って、手が止まりました。

ハルミさん(GitHub: harumiWeb / Zenn: harumikun)。今回は、お名前を出させていただきます。理由は最後まで読んでいただければ分かります。

ぱっと見は、目立たないのです。スターの数は、ほんの10ほど。ところが中を覗くと ── 積み上げたコミットが800回超、リリースが27回。目立たなさと作り込みの厚みが、まるで釣り合っていない。典型的な「隠れた本気」でした。動機がまた生々しい。曰く、勤め先には サグラダファミリア級に入り組んだマクロブックが無数にある ── その地獄をなんとかしたいのだ、と。

代表作の xlflow は、ひとことで言えば「VBAを、ちゃんとしたソフトウェアとして開発する」ための基盤です。VBAをブックから取り出してGitとテストと自動化に乗せ、仕上がったら押し戻す。エラーダイアログを検知して閉じてターミナルに流し、MsgBoxをヘッドレス化し、UserFormをYAMLで版管理し、AIエージェントが自律で開発を回せるところまで、隅々まで設計されています(Zennの解説記事)。

それだけでも大したものなのですが、今月に入って、この方は VBA用の言語サーバー まで公開しました(VSCode拡張の記事)。VSCode上で補完が効き、定義ジャンプが効き、リアルタイムでエラーが出る。CreateObject で作った遅延バインディングのオブジェクトにまで補完が効くというのですから、VBAの構文解析器と型推論を自前で書いているわけです。ほとんど、言語の処理系の自作です。

正直に書きます。質の高い、堅牢で、保守に耐えるVBAを"作れる"のは、おそらくハルミさんのほうが上です。 テストが回り、解析が効き、Gitで安心して直せる。この足場の差は本物で、見栄を張っても仕方がありません。

ただし、向きが正反対だった

それでも、負けたという感じがしなかったのは、走っているコースが違ったからです。

ハルミさんは公言しています ── 「私はExcelVBAは無くなってしまえばいいと思ってる人間です」。VBAの工数を、滅ぼしたい。だから道具の根っこは、VBAをExcelの外へ運び出す方向を向いています。VSCodeへ、Gitへ、テストへ。言ってみれば「Excelを卒業するための道具」です。

私の向きは逆です。開いたままのブックにAIを連れて入って、会話しながらその場で直す。「Excelに帰るための道具」。優劣ではなく、住み分けです。ここまでなら、よくある「すごい人がいました、でも自分の畑を耕します」という話で終わりです。

終わらなかったのです。

彼のもう一本の矢

ハルミさんには、もう一つ代表作があります。ExStruct ── いわゆる「神エクセル」を、AIが読める 意味構造JSON に変換するライブラリです(Zennの解説記事)。

セル結合も、方眼紙も、図形も、罫線で描かれた表も。人間がレイアウトに埋め込んだ「意味」を、機械の読める構造に畳み直す。設計上の狙いは、抽出したJSONをNotebookLMやRAGに食わせること ── つまりここでも、Excelから意味を救出して、外の世界へ運び出す 道具です。彼の思想は一貫しています。

私はこれを見て、震えました。ただし、彼の意図とは逆の理由でです。

長年あたためてきた構想があります。私は昔から、法律や条例や規則といった文章をシートに貼り込んで、まるごと全文検索できる Excel を作っては使ってきました。勝手に「エクセル本」と呼んでいました。ブックは表を置く場所であると同時に、文章を溜めて、引く場所でもある ── そういう使い方を、ずっとしてきたのです。

だから NotebookLM が登場したとき、正直「やられた」と思いました。ドキュメントの束に質問を投げると、答えが返ってくる。私が「エクセル本」で追い求めていたものの完成形が、Excel の外側に、先に現れてしまった。悔しいので、名前だけは決めてありました。ドキュメントの束と会話できるなら、ブックの束と会話できてもいいはずだ。名付けるなら「エクセルブックLM」。

構想はずっとあったのに、足りないものが一つありました。AIの「目」です。AIにセルの値は読めても、A1:C2の結合が大見出しであることも、シートに浮かぶボタンがどのマクロに繋がっているかも、見えていなかった。値は読めるが、作った人の意図が読めない

ExStructの畳み方は、まさにその目でした。そこで自作の管理ツールに、同じ発想のコマンドを一本足しました。開いたままのブックを、その場で意味構造JSONに畳む。セルの疎行列、結合、図形とボタンとその行き先のマクロ、テーブル。畳んだJSONをAIに読ませて、そのまま会話する。

10年育てた自作のブック(グループ化されたボタンだらけの、我ながら立派な神エクセルです)で試したところ、図形の入れ子も、ボタンに登録されたマクロも、結合セル29箇所も、一枚のJSONに収まりました。それをAIに読ませたら ── ブックの構造について、普通に会話が成立するのです。「このボタンはどのマクロに繋がっていますか」に、答えが返ってくる。

開いたままのブックが、会話の相手になった。 何年も温めた構想が、彼の畳み方を借りた途端に、動き出したのです。

ここで、白状しておきます。この使い方は、たぶん作者の設計意図にありません。ExStructは意味を 外へ運び出す ための担架です。私はその担架に載せた意味を、外へ運ばず、ブックの中に持ち込んで、その場に座り込みました。同じ刃の、逆向きの使い方です。

気づいてしまったこと

ここからは、私の見立てです。事実と分けて読んでください。

ハルミさんがVBAと本格的に出会ってから、まだ二年も経っていません。ご本人の振り返り記事によれば、工場のライン職からDXエンジニアに転身したのが2024年の秋。VBAに触れたのは、そこからです。転身した先で、社内のマクロ地獄に放り込まれた ── 憎むのに十分な出会い方です。

その一、二年の人が、何をしたか。エラーをAIに読める形にし、テストを整え、フォームを版管理に乗せ、ついに言語サーバーまで書いた。私はVBAの周辺に40年近くいますが(Lotus 1-2-3から数えて、です)、断言できます。これらは全部、VBAが今後10年生き延びるためのインフラです。 AIの時代にVBAが「読めない・テストできない・怖くて触れない」レガシーで終わるか、「AIと一緒に保守できる資産」に化けるか ── その分かれ目を、ハルミさんの道具が変えてしまった。

本人は、滅ぼしたいと言いながら。

そしてもう一つ。嫌いなだけの人は、こういうものを作りません。移行ツールを書いて、さっさと立ち去るはずです。ところが彼が書いたのは、リンタで、フォーマッタで、テスト基盤で、言語サーバーだった。全部、VBAと末永く暮らすための道具 です。遅延バインディングの癖にまで補完を効かせるというのは、嫌いな相手の癖をそこまで精密に覚えているということです。宣言と行動が食い違うときは、行動のほうが本音だと、私は思っています。

嫌いだ嫌いだと言っていたのに、いつの間にか ── よくある話です。そして、一番いい話です。

おわりに ── 矢の礼

白状すると、なぜ毎日同じ問いをAIに投げ続けていたのか、自分でもよく分かっていませんでした。空振りが続けば、普通は問いを引っ込めるものです。答えが出て、ようやく分かりました。勘は、当たっていたのです。 同じ景色に気づく人間が、私一人のはずがない ── 証拠が世の中に出てくる前から、どこかでそう確信していて、その確信が、問いを引っ込めさせなかった。勘というのは、当たったときにだけ、あとから意味の分かるものなのだと思います。

周りの反応がどうだったかは、ご本人が記事に書いています。「Claude Code?聞いたことあるけど何も知らんw」「そもそも今時VBA使ってるやついねーよ!」── あれだけのものを作っても、身近な場所からは、まだそう見えるのです。けれど外の世界は気づき始めていて、彼の道具の周りには、少しずつ人が集まりだしています。隠れた本気が隠れていられる時間は、そう長くないだろうと思います。

ハルミさん。面識もないのに名前を出して、勝手なことを書きました。お詫びと、それから、お礼を言わせてください。

あなたがVBAを憎んで作った目は、VBAを愛している側の手の中で、開いたままのブックと会話する目になりました。あなたの矢を一本、逆向きに放たせてもらいました。おかげで、私の10年越しの構想が動き出しました。

Excelを卒業するための道具と、Excelに帰るための道具。同じ腕から出た矢が、正反対に飛んで、どちらも刺さっている。こんな面白いことは、めったにありません。

「Excelを開いたまま、会話でどうにかする」という細い道で、私はしばらく歩いています。あなたがいつか「無くなればいい」と言うのをやめる日が来たら ── そのときは、道の反対側から手を振ります。

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?