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

本記事にはプロモーション(アフィリエイトリンク)を含みます。

Excelの共有ファイルをやめたくて、Accessを使うことにした

受注管理ではExcelの共有ファイルを使っていました。8人ほどが同じファイルを開くため、読み取り専用になったり、保存できなかったりします。入力と検索が重なる時間帯は、ファイルの取り合いでした。そこで、保存先をAccessに分け、操作画面をExcel VBAで作ることにしました。

入力画面はExcelのままなので、スタッフ側の操作は大きく変えずに済みます。一方で、保存先を分けるにはAccessファイルの場所と、誰がどの項目を更新するかを決めなければなりませんでした。コードを書く前に決めることが意外に多いと分かりました。

NEXUSを見よう見まねで画面にした

参考にしたのは会社の基幹システム「NEXUS」です。グレーの背景、四角いボタン、入力欄を選ぶと色が変わる画面でした。顧客名や注文内容、担当者のリストボックス、追加と保存のボタンをユーザーフォームに置きました。見た目をまねるだけでも、入力値の受け渡しで止まりました。

ボタンを押した時にどの処理を呼ぶのかも分かっていませんでした。名前を付けたコントロールと、コードの中で使う名前が一致していないだけで動きません。画面の見た目より、入力値をどこへ渡すかの方が難しい作業でした。

入門書とGoogle検索だけでVBAを覚えた

実は、プログラミングの知識はほとんどありませんでした。手元にあったAccess入門書には、ExcelからAccessへ接続して複数人で使う方法が載っていません。「Excel VBA Access 接続」で検索し、複数のサンプルをつなぎました。変数やデータ型の意味も分からず、動かない理由を確認する前に次のコードを探していました。

当時は、エラーの文章を読んでも「自分のコードのどこを指しているのか」が分かりませんでした。今なら、まず接続だけ、次に一件取得だけという小さなテストを作ります。最初から入力画面と検索まで一度に動かそうとしたことが、時間を長くした原因でした。

ADOとSQLで、Accessからデータを取得する

ExcelからAccessへ接続するためにADOを使いました。接続文字列、Connection、Recordsetなど初めて見る言葉ばかりです。プロバイダーやファイルパスが違えば接続できません。接続できたあと、次はSQLで受注テーブルを読み込みました。

ADOのサンプルを写しても、プロバイダーの違いやファイルパスの違いで止まります。そこで、まず接続が成功したか、次にRecordsetに行が入ったかを別々に確認しました。結果を一つずつ見ると、分からない言葉が少しずつ具体的な確認項目になりました。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=...
SELECT * FROM 受注テーブル

WHERE句と変数の組み合わせでつまずいた

必要だったのは、選んだ担当者の指定日の未処理データです。フォームの値をSQLへ渡すため、文字列の中へ変数を組み込みます。シングルクォーテーション、日付のシャープ記号、アンパサンドが一行に入り、記号一つでエラーになりました。Debug.Printで実行されるSQLと入力値を確認するようにしました。

特に日付は、画面で見えている表示とSQLへ渡る値が同じとは限りません。担当者名に余分な空白があれば一致せず、日付の形式が違えば検索結果は0件になります。エラーが出ないのに結果が出ないケースもあり、ここでかなり迷いました。

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

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

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

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

検索しても、エラーの原因が分からなかった

エラーをコピーして検索しても、公式説明は前提知識が必要でした。掲示板の回答も環境が違えば使えません。私が知りたかったのは、SQLのどの記号を直すかです。「フォームの日付で絞りたい」という事情まで検索結果が理解してくれるわけではありません。

検索結果を使うには、自分のコードとの違いを確認する必要があります。テーブル名、フィールド名、Accessの場所が一つでも違えば、そのまま貼ったコードは動きません。コピーするだけでなく、どの行が何をしているのかを確認する必要がありました。

何度も試して、ようやく検索結果が表示された

記号や日付の書き方を少しずつ変え、F5キーで何度も実行しました。接続、全件取得、固定条件、フォームの値という順番に戻すと、どこで止まったのか追いやすくなりました。指定した担当者と日付のデータが表示され、別の担当者を選ぶと結果も切り替わりました。なぜ動いたのかを当時は説明できませんでしたが、大きな前進でした。

動いたあとも、別の担当者や別の日付で検索して同じ結果になるかを確かめました。一つの条件だけで動いても、別の入力で止まることがあるからです。最初の成功はゴールではなく、使い続けられるかを確認する始まりでした。

今ならAIに聞ける。でも、前提を知る必要はある

今なら、エラー内容、SQL、データベース、入力値を整理してAIに質問します。ただし返ってきたコードをそのまま貼るのは危険です。Accessの場所、同時利用人数、入力値、エラー時の処理は自分の環境で確認する必要があります。

AIに聞く場合でも、実際のエラーとコードを整理する作業は残ります。機密情報やパスをそのまま貼らず、テーブル名や担当者名を置き換えて質問します。返答を採用する前に、自分の環境で小さなテストをすることも必要です。

まとめ:まず小さな検索から始める

これから試すなら、接続、全件取得、固定条件、フォームの値を使った条件の順に確認します。コードを継ぎ合わせて一気に動かすと、エラーの原因を追えません。最初から完璧にせず、小さな検索が動くところまで進めるのが私には合っていました。

私が最初にこの順番を知っていれば、何日もコードをつなぎ直す必要はありませんでした。接続できたか、データを取得できたか、条件を追加しても結果が合うかを分けて確認するだけで、失敗した場所が見えます。

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

無料プレゼント

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

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

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

¥980 ミニキット

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

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

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

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

【中古】ExcelVBAを実務で使い倒す技術/秀和システム新社/高橋宣成(単行本)

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

【中古】ExcelVBAを実務で使い倒す技術/秀和システム新社/高橋宣成(単行本)

この記事の内容を手元で試しながら、実務で少しずつ身につけたい方に向いた一冊です。

Amazonで見る →
楽天で見る →

※Amazon/楽天のアフィリエイトリンクを含みます

このスキルを体系的に学びたい方へ

VBAやPythonを独学で続ける中で、環境構築や設計の部分で止まってしまう場合は、学習サービスを使う方法もあります。自分の課題を整理してから、必要かどうかを判断してください。

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

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


1問だけ回答する