数ヶ月の苦闘、歓喜の結実
静寂。キーボードを叩く乾いた音だけが響く薄暗いオフィス。息を止めるようにして、F5キーを押し込んだ右手の人差し指。一秒にも満たない、しかし永遠にも感じられる数秒のフリーズ。いつもなら直後に「実行時エラー ‘-2147217900 (80040e14)’」という無機質なダイアログが画面中央に居座り。VBE(Visual Basic Editor)のコードエディタが目に刺さるような黄色に染まる。
何も起きない。いや、違う。Excelの画面上に浮かび上がったユーザーフォームのリストボックスに。これまで何十回、何百回と試しても表示されなかったデータが。音もなくスッと整列して表示されている。今日の日付。特定の担当者。未処理の受注データ。私が指定した通りの条件で抽出されたレコード群が、行儀よく並んでいる。「えっ?」
思わず間抜けな声が出た。
信じられなくて、もう一度「検索」と書かれたボタンを押し込む。表示される。別の担当者をドロップダウンリストから選んでみる。瞬時にデータが切り替わる。動いた。
SQLパズル、奇跡的に合致
意味不明なアルファベットと記号の羅列でしかなかったSQLが。データベースの深淵と繋がり、私の要求に完璧に応えた瞬間だった。心臓の鼓動が急激に早くなるのがわかる。胸の奥から湧き上がる、言葉にならない強烈な高揚感。数か月間の泥沼のような苦しみ、終わりの見えない試行錯誤が。一瞬にしてカタルシスへと昇華していく。なぜ動いたのか、論理的な理由は本当のところ全くわかっていない。
ただ、当てずっぽうで削ったり足したりしたパズルのピースが。奇跡的にカチリと音を立ててはまったのです。
ExcelとAccess連携。無謀な同時作業システム
まず、時計の針を少し戻す。当時、私が直面していたのは、受注管理における絶望的なボトルネックだった。Excelで作られた共有ファイルを複数人で無理やり扱う「誰かが開いていたら作業できない」という共有地獄。読み取り専用で開いてしまって保存できず、入力したデータが虚空に消える悲劇。これを終わらせることが、私の至上命題。最大8名の受注センタースタッフ全員が、自分のPCから同時にデータを読み込み。
同時に書き込める環境。それが絶対に必要だった。構想はこうだ。データの保存先は。ネットワークの共有フォルダの奥深くに置いたAccessファイル(accdb)。これがバックエンド。そして、スタッフが実際に操作する画面(フロントエンド)は。それぞれのPCに配布したExcelVBAのユーザーフォーム。表面上はExcelの皮を被せつつ。裏側でネットワーク越しにAccessのデータベースへ繋ぎにいく。
これならExcelの排他制御に邪魔されることなく。全員が同時に作業できるはずです。
NEXUS」をExcelで画面設計
画面設計のお手本にしたのは、社内で稼働していた基幹システム「NEXUS」だ。当時の会社全体を支えていたその巨大なシステムは。社内の噂によれば「開発に何億円もかかっている」という代物。おそらくVB6などの古い言語で作られていたのだろう。背景は無機質なグレー、立体感のある四角いボタンが整然と並び。テキストボックスにカーソルを入れると背景色がパッと黄色に変わる。
現代のWebアプリから見れば洗練されているとは言い難い。あのいかにも「業務システム」という武骨で古めかしい顔つき。素人目にも堅牢そうに見えたあのGUIを。私はExcelのユーザーフォームで見よう見まねで再現しようとしていた。

何億円ものコストがかかるシステムが担うような役割を。ただの一事務員がExcelとAccessの連携で代替しようという狂気。今思えば無謀としか言いようがありません。
知識ゼロのコピペ、エラーと格闘
次に、開発をスタートした時点で、私のプログラミング知識はゼロに等しかった。手元にあるのは、実質的な降格人事で新部署に飛ばされたあの日。上司から無言で渡された一冊の分厚いAccess入門本だけ。表紙が擦り切れるほど読んだ。しかし、本を開いても私の望むドンピシャの答えは載っていなかった。

VBA独学、基礎の壁と悪戦苦闘
入門書が手取り足取り教えてくれるのは、Access単体でのテーブルの作り方や。クエリの視覚的な組み方、Accessのフォーム機能を使った画面作成ばかり。「ExcelのVBAから。裏側のAccessにこっそり接続して複数人で同時にデータを読み書きする」
そんなマニアックで邪道とも言える手法は。初心者向けのキラキラした本に書かれているはずもない。頼みの綱はGoogle検索。
「Excel VBA Access 接続」「VBA 複数人 同時入力」「VBA ユーザーフォーム 使い方」
思いつく限りの単語を検索窓に叩き込み。ヒットした個人ブログや技術系掲示板のコードを片端からコピーした。変数の宣言も、データ型の意味も。SubとFunctionの違いすらあやふやな状態。見つけてきたコードの断片をツギハギし、無理やり繋ぎ合わせる。
フランケンシュタインの怪物のような継ぎ接ぎのコード。当然、動かない。エラーが出るたびにコードを睨みつけるが。どこが致命的に間違っているのかを読み解く基礎的な文法知識が決定的に欠けているのです。
ADOとSQL、地獄のデータベース操作
中でも最大の絶望をもたらしたのが「ADO(ActiveX Data Objects)」という未知の概念だった。ExcelからAccessのデータを操作するための。いわば外部データベースとの翻訳機のような役割を果たす仕組み。
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=...
一方で、接続文字列と呼ばれるこの呪文のような一行。アルファベットと記号の羅列。Connection。Recordset。Open。Close。CursorLocation。オブジェクト指向の片鱗すら理解していない素人にとって、これらは理屈ではなく。ただ丸暗記して唱えるしかない降霊術の儀式でしかなかった。

データベースに繋ぐことすら一苦労だったが。本当の地獄はその先に口を開けて待っていた。「SQL(Structured Query Language)」。全件取得の
SELECT * FROM 受注テーブル
ここで一度立ち止まって考えてみてください
Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。
WHERE句と変数の底なし沼
は、奇跡的に通った。レコードセットをDo Whileループで回して。セルの1行目から順番に書き出していく処理が動いた時は感動したものだ。問題は、データを条件で「絞り込む・選ぶ」こと。8人もスタッフがいれば、それぞれが見たいデータは当然違う。「Aさんの、本日の。未処理の受注データ」だけをピンポイントで抽出して画面に表示させなければならない。WHERE句を使った条件指定。
ここで、変数と文字列結合の底なし沼に完全に引きずり込まれた。
sql = "SELECT * FROM 受注テーブル WHERE 担当者 = '" & cmbStaff.Value & "' AND 受注日 = #" & txtDate.Value & "#"
そのため、文字列を囲むシングルクォーテーション。日付を囲むシャープ記号。そしてVBAの変数と文字列を繋ぐアンパサンド。ダブルクォーテーションの数が一つ多いだけで構文エラー。スペースが一つ足りないだけで実行時エラー。VBEの画面は常に警告の黄色に染まり続けた。
エラー解決の孤独な迷宮
エラーが出るたび、ダイアログのメッセージをコピーしてGoogleに泣きついた。検索結果のトップに出てくるのは、大抵がMicrosoftの公式ドキュメント。機械翻訳された不自然な日本語と、難解すぎる技術仕様の説明を読んで。さらに絶望が深まる。似たような悩みを抱えるエンジニアの掲示板(teratailやYahoo!知恵袋)も見つけた。しかし、彼らのコードは自分のシステムとは前提が違う。
「こういう意図ですよね?」という回答者の推測は。私のレベルをはるかに超えた高尚なものばかり。違う。そんな立派なシステム設計論を聞きたいんじゃない。今、目の前にあるこの不格好なSQL文字列の。どこのクォーテーションを消せば動くのか。それだけを知りたいのです。
意図が伝わらない孤独なエラー解決
孤独なオフィスで。誰にも相談できないまま何時間も画面を睨み続けたことが何度あっただろう。エラーの原因が。SQL文の中に紛れ込んだたった一文字の全角スペースだと気づいた瞬間の。胃がねじ切れるような徒労感。自分の間抜けさへの強烈な自己嫌悪。それでも翌日にはまたキーボードの前に座っていた。
しかし、検索エンジンは、キーワードに一致するWebページを探してくるだけ。「私は今、こういう画面を作っていて。この変数に入っている日付データでAccessのテーブルを絞り込みたいだけなのに。なぜか型落ちエラーが出る」
そんな私の泥臭い「意図」や「背景」を。Googleが汲み取ってくれるはずもなかった。質問の仕方が悪いのか。自分の理解力が致命的に足りないのか。
孤独なオフィスで、検索ワードを少しずつ変えながら。終わりの見えないネットサーフィンを続けるしかなかった。

試行錯誤の果て、偶然の感激
理詰めでバグを特定する論理的思考など、早々に放棄していた。エラー画面を睨みながら、コードを適当にいじる。ここにシングルクォーテーションを入れてみる。ダメ。じゃあ、こっちのアンパサンドを消してみる。コンパイルエラーで文字が赤くなる。日付のフォーマットが悪いのかと、Format関数を噛ませてみる。やはりダメ。
たった一つのWHERE句の条件指定を通すためだけに。コードを書き換えてはF5キーを押し込むプロセスを何百回と繰り返した。それが数日間続くこともざらだった。
不毛な試行錯誤、奇跡の一撃
さらに、当てずっぽう。真っ暗な砂漠に落としたコンタクトレンズを。手探りで這いずり回りながら探すような不毛な作業。それでも、試行回数を重ねるしか前に進む術はなかった。「絶対にあのNEXUSみたいなシステムを完成させて。あの共有地獄を終わらせる」
その異常な執念だけで、キーボードにしがみついていた。そして訪れたのが、冒頭の瞬間だ。何百回目かの書き換え。何千回目かのF5キー。
突然、黄色いハイライトが消え。望んだ通りのデータが画面にすい込まれるように表示された。論理的な裏付けに基づく成功ではない。膨大な試行錯誤の末に、確率論の果てに引き当てた、ほぼ偶然に近いアタリ。自分が書いた(コピペした)無機質なコードが、巨大なデータベースを動かし。現実の業務を変える力を発揮したという揺るぎない事実。全身の粟立つような、あの強烈な感激。あの瞬間があったからこそ。
私はその後もプログラミングという底なし沼に沈み込んでいくことになった。
生成AI時代の開発:過去の苦闘と変わらぬ喜び
受注管理システムは、数か月の格闘の末になんとか完成した。最大8名が同時にアクセスし、サクサクと受注処理を進めていく。NEXUSを模したグレーの画面の上で。私が命を吹き込んだコードが毎日休むことなく働き続けた。今、もし同じものを一から作れと言われたら、あんな泥臭い苦労は絶対にしない。今の私たちには生成AIがあるからだ。「このVBAのSQL、日付変数のところでエラーになる。
原因を教えて」
エラーの出たコードをそのまま貼り付けてChatGPTやClaudeに投げれば。1秒後には完璧に修正されたコードが返ってくる。「ここでは日付が文字列として扱われているため、#で囲む必要があります。修正後のコードはこちらです」
私の拙い説明から。やりたいことの「意図」を完璧に汲み取り。論理的な理由とともにピンポイントで答えを提示してくれる。
あの時、何日もかけて泣きそうになりながら探していた答えが。息をするように手に入る世界。正直、今の環境からプログラミングを独学できる人たちが羨ましくて仕方ありません。
苦闘の先にAI。システムを動かす喜び
あの孤独で狂気じみた数か月の格闘が、無駄だったとは思わない。意味不明な暗号の羅列を前に立ち尽くした絶望。Googleの検索窓に祈るような気持ちで打ち込んだキーワード。そして、偶然の果てにシステムが息を吹き込んだ瞬間の、何物にも代えがたい感激。あの手探りの苦行を骨の髄まで味わったからこそ、意図を汲み取ってくれるAIの凄さが。今の私には痛いほどわかる。道具は劇的に進化した。
コードを書くハードルは限りなくゼロに近づいている。画面の向こう側のシステムを自分の手で動かした時のあの震えるような喜びは。いつの時代も、どんなツールを使っても変わらないはずです。
関連リンクとチェックリスト
著者はこうして解決の糸口を見つけた
著者も同じ境遇から始まりました。独学でここまで自動化した道のりを参考にしてみてください。
学習サービスとアンケート
このスキルを活かしてさらに前へ進むなら
Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。

