はじめに
今年の五月に、「会話するだけでマクロが直る」という記事を書きました。
あれから半年、マクロを新規に作るだけでなく、壊れた数式を直したり、アドインを束ねたりと、AI との付き合い方はどんどん進んできました。
そして今夜、またひとつ面白い体験をしました。Excel VBA の UserForm の UI 改善を、キーボード操作を含めて、最初から最後まで会話のキャッチボールだけで直してしまったのです。
相手は、軽量で俊敏な Gemini 3.8 Flash(フラッシュ君) です。
手作業でやろうとすれば、イベントの癖やフォーカスの奪い合いに頭を抱え、つい後回しにしてしまうような泥臭い UserForm の調律が、ものの数分、雑談しているような手軽さで仕上がっていきました。
今回は、そのときの様子を振り返りながら、「フォームは作るものではなく、会話で育てるものになった」という話を書いてみます。
TL;DR
- UserForm のキーボード操作(起動時フォーカス、矢印キーによるタブ巡回、Enter 実行)は、手作業でやるとイベントの罠が多くて非常に面倒な作業です
- 「開いた直後に↓キーで選べない」「タブの切り替えもキーボードでやりたい」「今どのタブにいるか分かりにくい」といった感覚的な要望を、口頭で伝えるだけでサクサク直っていきました
- エクセルマネージャーの最大の恩恵は、一番面倒だった UserForm が会話だけで作れるようになり、Excel がまるで「専用業務ソフト」のように動くようになったことです
- 指示のたびに、Gemini 3.8 Flash がピンポイントで VBA コードを書き換え、全体コンパイル・134件のテスト・アドイン登録まで一撃で完遂してくれました
- 重厚な大型モデルでなくても、手足となる道具(エクセルマネージャー MCP)と明確な指示があれば、フラッシュ君が電光石火の速さでフォームを仕上げてくれます
手作業なら絶対に面倒な「UserForm のキーボード化」
Excel VBA で UserForm を作ったことがある方なら、一度は共感していただけるのではないでしょうか。
画面にリストボックスやボタンを配置して「クリックすれば動く」状態にするのは、それほど難しくありません。しかし、「マウスを使わず、キーボードだけでスイスイ操作できるようにする」となると、途端に難易度が跳ね上がります。
- フォームを開いた直後、リストボックスにフォーカスが当たっていないので、キーボードの↓キーを押しても何も起きない
-
InitializeイベントでSetFocusしようとしても、フォーム表示前なので無視される(Activateイベントを探して書く必要がある) - タブ(TabStrip)をクリックするとタブ側にフォーカスが残ってしまい、またリストがキーボードで動かなくなる
- 左右の矢印キーでタブを切り替えようとすると、
KeyDownのKeyCodeを拾ってインデックスを増減させ、端で止めるかループさせる計算が要る - 右端の「設定」タブに入ってリストが消えると、フォーカスを失ってキー操作が一切効かなくなる……
これを VBE(Visual Basic Editor)を開いて手作業で直そうとすると、プロパティウィンドウとコードウィンドウを行ったり来たりし、試しては閉じ、また直して……と、小一時間は平気で溶けていきます。
結局、「まあ動くから、マウスでクリックすればいいか」と妥協してしまうのが常でした。
会話のキャッチボールで、フォームが勝手に育っていく
今夜の作業は、実に何気ない問いかけから始まりました。
「今開いている Excel シートの開いているフォーム分かりますか?」
画面の向こうのフラッシュ君は、一瞬も迷わずに道具(エクセルマネージャー)を叩き、
「対象ブック: 秀コンボ.xlsm、統合マクロフォーム(ロード中)」
と即答してきました。
ここから、会話だけでフォームを直していく時間が始まりました。
1. 「開いた直後からキーボードで選べるようにして」
まずお願いしたのは、起動直後のフォーカスでした。
「開いた時にキーボードの上下や PageDown/Up ができるように、1段目にフォーカスがある状態にしてほしいです。あと、Enter で実行、右クリックで編集に飛べるようにもしたいです」
フラッシュ君はコードをサッと点検し、「Enter で実行」と「右クリックで編集」はすでに既存コードに組み込まれていることを見抜きました。
動かなかった理由はただ一つ、**「開いた直後にリストへフォーカスが当たっていなかったから」**です。
フラッシュ君は UserForm_Activate イベントをサッと足し、リストの先頭行を選択して SetFocus するコードを書き込みました。
Private Sub UserForm_Activate()
On Error Resume Next
If lstItems.ListCount > 0 Then
If lstItems.ListIndex < 0 Then lstItems.ListIndex = 0
lstItems.SetFocus
End If
On Error GoTo 0
End Sub
これだけで、フォームを開いた瞬間から、手をキーボードに置いたまま↓キーでマクロを選び、Enter で即実行できるようになりました。
2. 「タブの切り替えも、キーボードでやりたい」
リストがキーボードで動くようになると、すぐに次の欲が出てきます。
「マウスでタブをクリックした時もその都度リストにフォーカスしてほしいし、タブの切り替え自体もキーボードでできませんかね?」
フラッシュ君からは、
「左右矢印キー(← / →)でタブを切り替えるのが、片手でリスト操作とタブ巡回を両立できて最もおすすめです」
と提案が返ってきました。
「じゃあそれでお願い」と答えると、lstItems_KeyDown に左右キーの判定が追加され、タブ切り替え処理にも SetFocus が組み込まれました。
左右キーでカテゴリを切り替え、上下キーでマクロを選び、Enter で実行。マウスに一度も触らずにすべてのマクロへ手が届く快感が生まれました。
3. 「設定タブで止まる」から「0〜5のループ」へ
ところが、実際に矢印キーでポチポチ動かしていると、小さな落とし穴に気づきました。
「矢印キーで進んでいって『設 定』タブに入ると、キーが効かなくなっちゃいますね」
設定タブにはマクロの一覧リストがないため、フォーカスが外れてキー監視が止まってしまうのです。
フラッシュ君に伝えると、すぐに理由を説明し、こう提案してきました。
「日常のマクロ選択では、マクロ一覧のある『アクティブ』〜『すべて』(0〜5)の間で端同士をループさせるのが一番快適です」
「それで行こう」と返すと、数秒後には「すべて」から右キーで「アクティブ」へ、「アクティブ」から左キーで「すべて」へ戻るループ処理が完成していました。
ElseIf KeyCode = vbKeyLeft Then
KeyCode = 0
If tabMain.Value <= 0 Or tabMain.Value > 5 Then
tabMain.Value = 5
Else
tabMain.Value = tabMain.Value - 1
End If
ElseIf KeyCode = vbKeyRight Then
KeyCode = 0
If tabMain.Value >= 5 Then
tabMain.Value = 0
Else
tabMain.Value = tabMain.Value + 1
End If
End If
設定画面に引っかかることなく、マクロの棚をぐるぐると軽快に巡回できるようになりました。
4. 「今どのタブにいるか、もっと分かりやすく」
最後に手を入れたのが、視覚的なフィードバックでした。
Windows 標準の TabStrip は、選択中のタブの色の変化が控えめで、今どこを開いているのかが少し見えにくいのです。
「もうちょっと分かりやすくできないかな」と相談すると、フラッシュ君からいくつかのアプローチが提示されました。
その中から「一覧直上の件数ラベルにタブ名を大きく明記する」を選んだところ、フラッシュ君はさらに気を利かせて、3重の視覚的強調を組み込んでくれました。
-
タブ見出し: 選択中のタブ文字を
【アクティブ】のように強調 -
一覧直上の件数ラベル: 青色の太字で
【アクティブ】 73件と大きく表示(表示枠も広々と拡張) -
タイトルバー: 最上部のウィンドウ枠も
マクロ・レシピ統合一覧 ― 【アクティブ】に連動
リストを見つめる視線の真上で、鮮やかな青文字の現在タブが目に飛び込んでくるようになり、迷う要素が完全にゼロになりました。
エクセルマネージャーで一番化けたのは「フォーム」だった ── 表計算が「専用ソフト」になる瞬間
今夜の作業を終えて改めて実感したのは、**「エクセルマネージャーを使っていて何が一番良くなったかと言えば、間違いなくこのフォーム(UserForm)だ」**ということです。
Excel というのは、基本的には行と列が並んだスプレッドシート(表計算)です。
しかし、手前に一枚しっかりとした UserForm が立ち上がり、キーボードやボタンで自在に操作できるようになると、Excel はただの表計算であることをやめ、まるでひとつの「業務専用ソフトウェア」のように動き始めます。
シートのセルを直接ポチポチいじるのではなく、洗練された操作パネルから必要なマクロや処理を呼び出す。
使う側の感覚としては、もう「Excel を開いて作業している」のではなく、「社内専用の業務アプリを動かしている」のと何ら変わりがありません。この差は、日々の実務において信じられないほど大きな効果を生みます。
ところが、これまでの Excel VBA において、その**「一番効果の大きい UserForm」こそが、開発者にとって「一番面倒くさくて作りたくない領域」**でした。
- コントロールを並べて座標を合わせる(UI算数)
- ボタンを押したとき、文字を変えたときのイベントを書く
- フォームが開いたとき、閉じたときの初期化やフォーカスを管理する
- リストボックスとタブの連携マクロを組み上げる
標準モジュールのマクロなら「セルを読んで計算して書く」だけで済みますが、フォームは「画面の見た目」と「イベントマクロ」が複雑に絡み合います。VBE を開いてマウスで部品を微調整し、コードウィンドウでイベントを追いかける作業は、本当に骨が折れるものでした。だからこそ、多くの人が「フォームを作るのは面倒だから、シート上のボタンでいいや」と諦めていたのです。
それが今や、VBE を一度も開くことなく、会話だけでフォームが立ち上がり、思いついた時にキーボード操作やデザインまでサクサク直せてしまう。
一番面倒だったはずの UserForm が、一番あっけなく会話で作れるようになった。
だからこそ、Excel を本格的なソフトウェアへと仕立て上げるハードルが、一気にゼロになったのだと感じています。
なぜフラッシュ君(Gemini 3.8 Flash)でこんなにスムーズにいくのか
今回の修正で改めて驚かされたのは、**Gemini 3.8 Flash の「軽快さと正確さ」**です。
巷では「大型モデル(Opus や Pro)でなければ、複雑なプログラミング作業は任せられない」と言われることもあります。
確かに、壊れた数式の空間構造を解き明かすような高度なアルゴリズムの設計には、じっくり深く考える頭脳が必要です。
しかし、日々のツールの手入れや、フォームの細やかな UI 改善において最も威力を発揮するのは、**「打てば響く速さ」と「道具を正確に使いこなす手際の良さ」**でした。
フラッシュ君は:
- 「フォームが開いているか」を 0 秒で道具を使って点呼する
- 修正対象のプロシージャを特定し、
patch_procedureで必要な数行だけを正確に書き換える - 周辺コードを勝手に触らず、全体コンパイルを通す
- 134 問あるテストの関所を自ら走らせ、全件 PASS を確認する
- 開発用ブック(.xlsm)からアドイン(.xlam)へ、更新登録まで自律的に完結させる
この一連の後処理を、会話の 1 往復ごとに、わずか数十秒で全自動でやってのけます。
人間側の役割は、「ここ、こう動かないかな」「ちょっと見えにくいな」と、実際に動かしてみた素直な感想をチャットに投げるだけです。コードを書くどころか、VBE の画面すら一度も見ていません。
おわりに ── フォームは「作る」ものから「会話で育てる」ものへ
かつて、VBE で一生懸命フォームを作っていた頃、UI の細やかな調整はいつも諦めの対象でした。
「自分しか使わないし、マウスで動けば十分」「キーボード対応なんて、コードが長くなるだけで面倒くさい」。
そうやって妥協していたのは、キー監視やフォーカス制御を一つ足すだけでも、人間が手作業でやるにはあまりにも手数が多かったからです。
ですが、会話するだけでコードが書き換わり、テストが走り、アドインが焼き直される環境が手元にあれば、
「もっとこうしたい」と思ったその瞬間に、独り言をつぶやくように画面が育っていきます。
フォームはもう、苦労して設計図を引いて「作る」ものではありません。
机の上の小さな助手(フラッシュ君)と雑談しながら、**「会話で育てていく」**ものになったのだと、キーボードだけで軽快に動く一覧を眺めながら感じた夜でした。


