えくせるちゅんちゅん

ことりがエクセルをちゅんちゅんするブログ

VBA100本ノックを6日で制覇してみた

2025/12/28~2026/1/2にかけて、WEBサイト『Excelの神髄』さんの『VBA100本ノック』に挑戦させていただきました!

かれこれ5年前にTwitterで日々更新されていたお題ですが、当時はVBAを頻繁に書いていたこともあり、自分がやっても意味がないかなと思って手を付けていませんでした。

しかしながら、今となっては新たにVBAで何かを作る機会も減り、研究することもないせいで、Twitter・ブログ・Discordへ投稿できる報告やTipsもなくなり、「作りたい作品がある」と言いながら未完成のままお蔵入りになってしまう日々。

「表に出していない作品作りは、やってないのと同じだ」という己の心掛けに照らし合わせたとき、今年も連休を無為に過ごすくらいなら、何か新しい作品、あるいは実績のようなものを生み出せないかと考えていました。そこで、VBA100本ノックなら本気でやれば連休中に完結できるのではないか? と思い立ち、挑戦することにしました。

また、コーディング作業は常時YouTubeで生配信を行いました。「無音でコード画面を見せられるより、考えていることを声に出し続けてくれた方が面白い」という意見を事前に聞いていたため、いわゆる「ライブコーディング」をぶっ通しで行いました。

とはいえ、他人に理解させることを意識しすぎるとコーディングに集中できなくなります。そのため、基本的には自分が普段脳内で思考していることを口に出すだけにとどめ、キリがついたときに、少しだけ視聴者のことを考えて説明し直すくらいが限界でした。

完成したプログラムとソースコードは、Excel-Fun.xls*のDiscordで公開しています。

果たしてこれが「自分が欲しいものを作る」というポリシーに適合している作品かは怪しいですが、好きな言葉である「やりたいことを、やりたいと思ったときにやる」、ちゃんとした言葉で言えば「思い立ったが吉日」ということになるのかもしれません。「やってやったぞ」という達成感は十分すぎるくらいに感じているため、まあ良しとしましょう。

チャレンジの縛りについて

私は分からないことは調べれば良いし、実務でAIの力を借りてこなすことに全く抵抗はありません。しかし、長年オフライン環境でマクロの記録、公式ヘルプ、VBE内のオブジェクトブラウザやプロパティウィンドウの情報を頼りにコーディングを行ってきた身としては、自力で解決策を見つけるからこそプログラミングは面白いと思っている人間でもあります。

したがって、今回はこんなルールを己に課して挑戦しました。

  1. 全行程をライブ配信 (配信ルールはYouTube側に記載)
  2. 既存コードの閲覧や転用は禁止 (今回の挑戦中に作ったコードのみ再利用可能)
  3. ネット検索やAIの使用は極力避ける (VBEの中で試行錯誤して、どうしても上手く行かなければ調べる)
  4. 自己流の書き方を貫く (自分が守りたい例外耐性、変更耐性、処理速度は考慮する)

1. 全行程をライブ配信

動画のタイトルに「眠れまてん!」なんて書きましたが、やったことがある人なら分かる通りネタです。100問を寝ずに解くのは、(一瞬で解けるような天才を除いて)生物学的にかなり危険だと思います。(最終的に休憩を含めて5日で60時間かかりました)

実際には「(年末年始の連休中に終わらせられる進捗にならないと)眠れまてん!」くらいのニュアンスです(笑)

それでも1日13時間や15時間などの連続配信を行いましたが、YouTubeの仕様でアーカイブが11:55:01以降カットされてしまい、結構な時間数の動画が消えてしまうという失敗を犯しました。

アーカイブ失敗については、YouTubeの仕様への勉強不足と、パソコンの性能には十分余裕があったのにOBSでローカル録画をしなかった私の責任です。 (後日、リファクタリング配信として振替を行い供養したので許してください)

また、途中から帰省した家族が飛び入りするという厳しい環境下でしたが、ミキサーの調整とミュートを駆使してなんとかやり過ごしました。

というか、背後でSwitch2で楽しそうにポケモンカービィのエアーライダーやマリオカートをプレイする叫び声が響く中で、よく誘惑に負けずにコーディングしたと自分を褒めてあげたいくらいです。

(それもこれも、100本絶対にやり切るという決心と、ライブ配信を見守って下さった皆様のおかげだと思っています。ありがとうございます。)

## ライブ配信の注意事項

この企画は、WEBサイト【エクセルの神髄】さんの【VBA100本ノック】を私が解く様子を、年末年始の連休を活用してYouTubeで流し続ける企画です。

【注意】

- ずっと説明しながらコーディングできるかどうかは分かりません。長時間画面が止まり無言になることもあります。
- 途中でおなかがすいたらご飯に行き、おなかが痛くなったらトイレに行きます
- 眠くなったら普通に配信を閉じて次の日にします
- 親フラ(兄弟フラ)する場合があります
    - 場合によっては長時間ミュートします
- RVC(リアルタイムボイスチェンジャー)を使用しているため、発言の一部が違う発音に変換されたり、ノイズが不自然な声に変化してしまうときがあります

2. 既存コードの閲覧や転用は禁止

VBAコードをブログやGitHubに公開していることから見て取れるように、これまでに自分がVBAを書きやすくするための関数ライブラリを結構な分量まとめています。

しかし、このライブラリを使うと問題の答えがそのまま書いてある危険性があるため、使用禁止にしました。もちろん、最後まで一度も開いていません。

ただし、記憶の片隅にあるライブラリは相当使いました。記憶は消せないので許してください。 お陰で、既存のライブラリより素晴らしいアイディアの関数がいくつも生まれたと満足しています。(後日見返して「車輪の再発明」に気がついてショックを受けるやつですが)

3. ネット検索やAIの使用は極力避ける

前述の通り、実務をAIの力を借りてこなすことに抵抗はありません。しかし、昨今のAIはコーディングの精度が目覚ましく、少しでも許すと一瞬で実戦投入できてしまうコードが生成される危険性があるため、そもそも使わないようにしました。

とはいえ、全く使ったことがないような技術は、どこから調べたら良いかわからないので、手詰まりになったら使えることにしました。

最終的に全く使わないわけにはいかず、以下のような一部の問題ではヒントを貰いました。

  • WordやPowerPointを操作する際の一般的な書き方
  • グラフオブジェクトの参照セル範囲を読み書きする方法
  • AccessSQLの間違い箇所の捜索

AIを使って解いた様子を配信しても何の面白みもないですから、思考過程をアウトプットしていきたいライブコーディングでは使わなくて正解だったと思います。

なお、お題の意味が分からなくて躓いた「ABC分析」については、逆にさっさとAIに聞いて勉強すべきでした。要は使いようですね。

4. 自己流の書き方を貫く

(自分が守りたい例外耐性、変更耐性、処理速度は考慮する)

なんとも自分に都合が良い条件ですが、そもそもプログラムというのは、エラーを考慮し始めると無限に危険箇所が増えていき、本来の目的のコードよりエラー対策のコードのほうが膨大になってしまいます。

VBA100本ノックを回答するにあたって、コードの品質をどこまで高めるかは定められていないため、自分が納得できるレギュレーションにしました。極端な話、サンプルで提示されたデータが通れば、エラー処理は全く書かなくても良いわけです。

似たような問題が繰り返し出題されますが、それぞれの問題に出題者が意図した狙いがあるはずで、前の問題と同じエラー処理を必ずしも書く必要はないと思っています。

また、極端な環境を想定して、以下のような対策を書いても(それはそれで面白いですけども!)、実務で生きるかどうかはわかりません。

  • 「揮発性関数がゴリゴリに使われたブックを開いている状態にも耐えられるようにセルの読み書きは最小限にする」
  • 「ファイルが保存されているサーバーが不安定なので通信が安定するまでOpenを5回繰り返す」
  • 「実行環境がMac OSかもしれないのでDictionaryから自作する」

(恐らくVBAが使われる多くの)実務では、「(想定ユーザー環境で)発生する可能性があるエラー」に絞って対策するくらいのバランスで作るはずです。ですから、今回はエラー処理へのこだわりは捨てました。

一方で、自分が実務で頻出した苦い思い出のあるエラーなど、気になるところは対策して、もういいやと思ったところは無視・妥協しました。処理速度についても、実務上弊害が出るような待ち時間になるならともかく、コンマ数秒のために無理に最適化を行うのはやめました。

思い出

初日は連続6時間配信が窮屈で、翌日も後半は結構きつかったです。でも、しばらく続けていたら何だか気にならなくなって、3日目からは起きている間は平気でずっと配信できるようになりました。

問題文に関して強く思い出に残っているのは、雑ですがこんなところです。

  • 問80 ABC分析:出題そのものが分からなかった
  • 問97 Access連携:SQLでハマって抜け出すのに苦労した
  • 問99 席次変更:純粋なアルゴリズム勝負で、現実的な時間内に計算させるのは難しかった

ことりちゅんVTuber化について

最近の活動の様子を知らない方はびっくりされたかもしれませんが、ついにバーチャルキャラクター化しました。「誰にどうやってアバター制作依頼しよう?」と呟き続けて早数年。作画技術0のド素人がAIで作れる時代になってしまいました。

解説音の方もRVC(リアルタイムボイスチェンジャー)という技術により克服しました。

YouTubeでの活動は、基本的にこの姿で行いますのでよろしくお願いいたします。ちなみに、本体は鳥の方ですから、ブログ等では引き続き今のキャラクターでいきます。

万が一収益化した場合に備えて、イラストは Google Gemini Pro におまかせして、RVCのAI学習済モデルも商用可のものを使用しています。 (これでも、色々な設定要素を盛り込んで決めてるんですよ?)

キャラクターを動かすLive2Dモデルは自力で作りました。おかげで可動部位が限定的ですし、配信中は頭の上に謎の線が入ったりと酷い有り様でした。

AIを使ったメディアコンテンツで活動するとプロのイラストレーターの方からは嫌われてしまうのかもしれませんが、私としてはクリエイターの方には感謝を捧げたい気持ちでいっぱいです。もし仮にキャラデザをしてくれる本職の方がいたら喜んでお金をお支払いしてお願いする心づもりでいます。(ただ、その場合も、私自身が記事や配信や資料で使うために自由にAIで加工することを認めてくださる稀有な方に限られますが……どんな規定が必要になるかよく話し合う必要がありそうですね)

Live2Dモデルは当面自力でアップデートしていくつもりでいますが、絵がちゃんとしたものに変わったときは(本気で勉強するか)専門の方にお願いしたいと思います。まあ、そこまで未来のことを考えるのは時期尚早ですね。

まとめ

かなり久しぶりにVBAを書いて、意外と忘れないものだなと思いました。細かい仕様はだいぶ怪しくなっていますが、業務で苦労したパターンなんかは身体に染み付いていて、書いていると次々と思い出されて面白かったです。

今回は飛び飛びでトータル10時間以上をかけて、長大なExcel関数に類似する関数ライブラリを制作しました。Excelには当時は無かった便利な関数がたくさん増えていて、そういった関数をVBAから呼べるようにしていなかったので、今回の挑戦でライブラリが充実して嬉しいです。 (実戦投入するには精度が荒く、じっくりデバッグリファクタリングが必要ですが)

最後に。ライブコーディングに限った話ではないですが、何かを発信する行為は己の弱さを露呈させるので勇気が必要ですね。でも、一歩踏み出してしまえば、あきらめがつくというか、案外できるものだなと改めて実感しました。

次は100本ノックの魔球編なり、他の何らかのお題を解くなり、また挑戦してみたいと思います。

それでは、最後までお読み頂きありがとうございました!

YouTubeチャンネルへの登録はこちら

www.youtube.com

Excel-Fun.xls*コミュニティへの参加はこちら

sites.google.com

プライバシーポリシー