「なぜ動いた?」意味もわからないままコピペしたSQLコードが突然成功した瞬間の感激。Googleだけを頼りにVBA独学でAccessと格闘し続けた数か月の記録

数ヶ月の苦闘、歓喜の結実

静寂が流れる、薄暗いオフィスでのことです。部屋にはキーボードを叩く乾いた音だけが響いていました。私は息を止めるようにして、F5キーを押し込みました。一秒にも満たない、短い時間です。しかし私には、永遠のようにも感じられる数秒のフリーズがありました。いつもなら、直後に実行時エラーのダイアログが画面に居座ります。VBEのコードエディタが、目に刺さるような黄色に染まるのが日常でした。

しかし、今回は違いました。Excelの画面上に、ユーザーフォームが浮かび上がります。リストボックスには、これまで表示されなかったデータが並んでいました。何百回と試して、ようやく手にした結果です。そこには、音もなくスッとデータが整列していました。今日の日付や担当者、未処理の受注データです。指定した通りの条件で、レコード群が行儀よく並んでいます。「えっ?」と、思わず間抜けな声が出てしまいました。

信じられなくて、もう一度「検索」ボタンを押し込みます。やはりデータは正しく表示されます。ドロップダウンリストから別の担当者を選んでみました。すると、瞬時にデータが切り替わります。ついに、システムが動いたのです。

SQLパズル、奇跡的に合致

SQLは、私にとって意味不明な記号の羅列でした。それがデータベースの深淵と繋がり、要求に完璧に応えた瞬間です。心臓の鼓動が急激に早くなるのが分かりました。胸の奥から、言葉にならない強烈な高揚感が湧き上がります。数か月間の泥沼のような苦しみがありました。終わりの見えない試行錯誤が、一瞬で喜びに変わったのです。なぜ動いたのか、論理的な理由は分かりません。

ただ、パズルのピースが奇跡的にはまったのです。当てずっぽうで削ったり足したりした結果でした。カチリと音がするような、完璧な一致を感じました。

ExcelとAccess連携。無謀な同時作業システム

ここで、時計の針を少し戻してみます。当時、私は受注管理の大きな課題に直面していました。Excelの共有ファイルを複数人で扱う「共有地獄」です。誰かがファイルを開いていると、他の人は作業ができません。読み取り専用で開いてしまい、保存できない悲劇もありました。入力したデータが消えてしまうこともあったのです。この状況を終わらせることが、私の大きな使命でした。受注センターでは、最大8名のスタッフが働いています。全員が自分のPCから、同時にデータを読み込む必要がありました。

同時に書き込める環境が、どうしても必要だったのです。そこで、一つの構想を立てました。データの保存先は、共有フォルダのAccessファイルにします。これがバックエンドの役割を果たします。スタッフが操作する画面は、ExcelVBAのユーザーフォームです。表面上はExcelですが、裏側でAccessに繋ぐ仕組みです。これならExcelの排他制御に邪魔されません。全員が同時に作業できるはずだと考えたのです。

「NEXUS」をExcelで画面設計

画面設計のお手本にしたのは、基幹システムの「NEXUS」でした。会社全体を支える、非常に巨大なシステムです。開発には何億円もの費用がかかっているという噂でした。おそらく古い言語で作られていたのでしょう。背景は無機質なグレーで、四角いボタンが整然と並んでいます。テキストボックスにカーソルを入れると、背景色が黄色に変わります。そんな仕様を再現しようと決めました。

現代のアプリと比べれば、洗練されているとは言えません。しかし、あの武骨で古めかしい顔つきには魅力がありました。素人目にも、非常に堅牢なシステムに見えたのです。あのGUIを、私はExcelで見よう見まねで再現しようとしました。

何億円もかかるシステムと同じ役割を求めていました。ただの一事務員が、ExcelとAccessでそれを代行しようとしたのです。今思えば、それは無謀としか言いようがない挑戦でした。

知識ゼロのコピペ、エラーと格闘

開発を始めた時、私のプログラミング知識はゼロでした。手元には、一冊の分厚いAccess入門本があるだけです。それは新部署へ異動した日、上司から渡されたものでした。表紙が擦り切れるほど、何度も読み込みました。しかし、本の中に私の求める答えは載っていなかったのです。

VBA独学、基礎の壁と悪戦苦闘

入門書の内容は、Access単体での使い方が中心でした。テーブルの作り方や、クエリの組み方ばかりが載っています。「ExcelからAccessに接続して同時入力する」という方法は載っていません。それは初心者向けの本にはない、少し特殊な手法でした。頼みの綱は、Google検索だけでした。

「Excel VBA Access 接続」などの単語で検索を繰り返します。ヒットしたブログや掲示板のコードを、片端からコピーしました。変数の宣言やデータ型の意味も、当時は理解していません。SubとFunctionの違いすら、あやふやな状態でした。見つけてきたコードの断片を、無理やり繋ぎ合わせていきます。

継ぎ接ぎだらけのコードですから、当然すぐには動きません。エラーが出るたびに、私はコードを睨みつけました。しかし、どこが間違っているのかを読み解く知識がありません。基礎的な文法知識が、決定的に欠けていたのです。

ADOとSQL、地獄のデータベース操作

最大の壁となったのは、ADOという未知の概念でした。これはExcelからAccessを操作するための翻訳機です。外部データベースとやり取りするための、重要な仕組みです。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=...

接続文字列と呼ばれる、呪文のような一行がありました。ConnectionやRecordsetといった言葉も次々に現れます。オブジェクト指向を知らない私には、これらは降霊術の儀式でした。理屈ではなく、丸暗記して唱えるしかなかったのです。

データベースに繋ぐだけでも、相当な一苦労でした。しかし、本当の地獄はその先に待っていました。それはSQLという言語の壁です。全件取得のコードは、次の通りです。

SELECT * FROM 受注テーブル

VBA・Pythonをもっと本格的に学ぶなら

VBAやPythonを実務レベルまで引き上げたい方には「侍エンジニア」がおすすめです。マンツーマン指導・オーダーメイドカリキュラムで、文系出身でも挫折しにくい環境が整っています。無料カウンセリングだけでも学習ロードマップが明確になります。

侍エンジニア 無料カウンセリングを予約する →

WHERE句と変数の底なし沼

このコードは、奇跡的に実行できました。レコードをループで回し、セルに書き出す処理が動いたのです。その時は、大きな感動を覚えました。しかし問題は、データを条件で絞り込むことでした。8人のスタッフには、それぞれ見たいデータがあります。「特定の担当者の、本日の未処理データ」だけが必要です。WHERE句を使った、複雑な条件指定が必要になりました。

ここで私は、変数と文字列結合の沼に引きずり込まれました。

sql = "SELECT * FROM 受注テーブル WHERE 担当者 = '" & cmbStaff.Value & "' AND 受注日 = #" & txtDate.Value & "#"

シングルクォーテーションや、日付を囲むシャープ記号。そして変数を繋ぐアンパサンドが入り乱れます。ダブルクォーテーションが一つ多いだけで、エラーになります。スペースが足りなくても、実行は止まってしまいます。VBEの画面は、常に警告の黄色に染まり続けていました。

エラー解決の孤独な迷宮

エラーが出るたび、メッセージをコピーして検索しました。検索結果のトップは、大抵が公式ドキュメントです。不自然な日本語と難解な説明を読んで、絶望が深まります。エンジニアの掲示板も見つけましたが、前提が違いました。私のシステムにそのまま当てはめることはできません。

回答者の推測は、私のレベルをはるかに超えたものでした。私が知りたかったのは、高尚な設計論ではありません。今、目の前にあるSQLの、どこの記号を直せばいいのか。それだけが知りたくて、必死になっていました。

意図が伝わらない孤独なエラー解決

孤独なオフィスで、何時間も画面を睨み続けました。エラーの原因が全角スペース一つだと気づいた時の虚しさ。自分の間抜けさに対し、強い自己嫌悪を感じました。それでも翌日には、またキーボードの前に座るのです。しかし、検索エンジンはキーワードに一致するページを出すだけです。

「この変数に入っている日付で絞り込みたいだけだ」という意図。そんな泥臭い背景を、Googleが汲み取ってくれるはずもありません。質問の仕方が悪いのか、理解力が足りないのか。検索ワードを変えながら、終わりの見えない調査を続けました。

試行錯誤の果て、偶然の感激

論理的にバグを特定することは、早々に諦めていました。エラー画面を見ながら、コードを適当にいじってみます。ここに記号を入れてみる。ダメなら、あっちを消してみる。コンパイルエラーで文字が赤くなることもありました。日付の形式を変えてみても、やはりうまくいきません。

たった一つの条件指定を通すために、何百回と繰り返しました。コードを書き換えては、F5キーを押し込む作業です。それが数日間続くことも、決して珍しくはありませんでした。

不毛な試行錯誤、奇跡の一撃

それは、暗闇の中で小さな探し物をするような作業でした。手探りで這いずり回る、不毛な時間です。それでも、試行回数を重ねるしか方法はありません。「あのシステムを完成させて、共有地獄を終わらせる」という執念。それだけで、私はキーボードにしがみついていました。そして、冒頭の瞬間が訪れました。

突然、黄色いハイライトが消えました。望んだ通りのデータが、画面に吸い込まれるように表示されます。論理的な成功ではなく、確率論で引き当てたアタリでした。自分のコードがデータベースを動かしたという事実。全身が粟立つような、強烈な感激がありました。あの瞬間があったから、私はプログラミングにのめり込んだのです。

生成AI時代の開発:過去の苦闘と変わらぬ喜び

受注管理システムは、数か月の格闘を経て完成しました。最大8名が同時に、快適に処理を進められるようになりました。グレーの画面の上で、私が書いたコードが毎日働いています。今、同じものを作るとしたら、あんな苦労はしません。今の私たちには、生成AIという強力な味方があります。

「このSQLがエラーになる。原因を教えて」とAIに投げれば、すぐ解決します。ChatGPTやClaudeなら、1秒で修正案を返してくれます。「日付は#で囲む必要があります」と、論理的に教えてくれるのです。私の拙い説明から、やりたい意図を完璧に汲み取ります。答えがすぐ手に入る今の環境は、本当に素晴らしいものです。

プログラミングを今から学ぶ方たちが、正直に言って羨ましいです。かつて何日もかけて探した答えが、今は一瞬で手に入ります。

苦闘の先にAI。システムを動かす喜び

あの狂気じみた格闘の日々は、無駄ではありませんでした。暗号を前に立ち尽くした絶望。検索窓に祈るような気持ちで打ち込んだ言葉。そして、システムが息を吹き込んだ瞬間の喜び。あの苦行を味わったからこそ、AIの凄さが痛いほど分かります。道具は劇的な進化を遂げました。

コードを書くハードルは、今や限りなく低くなっています。しかし、システムを自分の手で動かした時の感動は変わりません。あの震えるような喜びは、いつの時代も共通のものです。どんなツールを使っても、その価値は色褪せないはずです。

関連リンクとチェックリスト

無料プレゼント

Excel業務を自動化する前に確認するチェックリスト(PDF)

自動化していい作業かどうか、VBAかPythonか、最初に避けるべき落とし穴。実務でよく迷うポイントを1枚にまとめました。メールアドレスだけで受け取れます。

無料でチェックリストを受け取る

¥980 ミニキット

コピペで動かせる3スクリプト+自動化チェックリスト

最新ファイルの自動選択・部署名ゆれの正規化・CSV文字コード確認の3本セット。今週の作業を1つだけ楽にするための最小キットです。

ミニキットを見る(¥980)

関連する学びを少し広げるなら

ExcelやVBAの作業をもう少し整理して学びたい方には、実務寄りの本で確認する方法もあります。

Excel・VBA業務効率化の関連書籍(Amazon) →

学習サービスとアンケート

このスキルを活かしてさらに前へ進むなら

Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。

プログラミングスクール Enjoy Tech!(エンジョイテック) →

[アンケート] この記事は役に立ちましたか?

30秒で答えられます。改善の参考にします。

1問だけ回答する