DLookup関数を使って入力フォームの支援機能を作る~テキストボックスへの値の代入~

こんにちはmasalifeです。

今回はwebフォームでよく見かける

「郵便番号を入力したら、住所が自動で入力される機能」

をAccessで作る方法を紹介します。

作るイメージは次のとおりです。

郵便番号という値から、その郵便番号に対応する住所の値をマスタ(テーブル)のフィールドから取得するにはDLookup関数を使用します。

合わせて読みたい

こんにちはmasalifeです。 Accessの力を最大限に発揮させるためには、関数の知識が必要不可欠です。 僕が多くのシステム構築をしてきた経験から、 この関数は覚えといた方がいい というものを順[…]

自動で該当のデータが入力される機能は

データ入力の効率化

データの完全性

の観点からもとても重要なので、ぜひ感覚を掴んで、入力フォームに機能を取り入れてもらいたいなと思います。

*方法(VBAコード)のみを知りたい方は【目次2.2: 住所を自動で入力するVBAコードを設定する 】のみを読んでください。

・DLookup関数

・DCount関数

・If文

・値の代入(VBA)

準備するもの

郵便番号と住所が格納されているマスタテーブル(T_住所マスタ)

郵便番号と住所が入力されているテーブルを作成します。

入力した郵便番号に該当する住所を取得するためのテーブルとなります。

住所を検索するフォーム(F_住所検索)

郵便番号を入力するテキストボックス(txt郵便番号)と該当の住所を表示するテキストボックス(txt住所)を配置した簡単なフォームを作成します。

郵便番号入力後、自動で住所を入力する機能を実装する

郵便番号を入力するテキストボックスのVBE画面を起動する

郵便番号入力後、データが確定したら自動で住所を入力するので、郵便番号を入力するテキストボックス(txt郵便番号)の更新後処理イベントにVBAを設定します。

(コマンドボタンを作成し、クリック時イベントにVBAを設定しても同様の結果が得られます。)

テキストボックスのプロパティシートを出して、

【イベント】タブの更新後処理の【…】アイコンをクリックします。


【コードビルダー】を選択し、【OK】ボタンをクリックします。

VBE画面が起動します。

・イベントは、オブジェクト(今回の場合はテキストボックス)に対してユーザーが行う操作などで発生します。

・更新後処理イベントはデータが入力され、データが確定した後に発生するイベントです。

・値がテキストボックスに入力された後にイベントプロシージャ(VBAコード)を実行するようにします。

住所を自動で入力するVBAコードを設定する

起動したVBE画面に次のコードを設定します。

*取得するデータがない場合のエラーに対応

VBAコードを読み解く

変数の中身

文字列を入れられる型(String型)の変数「jyusyo」には取得した住所フィールドの値が格納されます。

桁数の少ない数値を入れられる型(Integer型)の変数「i」にはDLookup関数で取得したレコードの件数が格納されます。

条件に合致したレコード件数を取得

郵便番号に合致したレコード件数をT_住所マスタから取得し、変数iに代入します。

例えば、郵便番号に5152305と入力した場合は、

レコード件数が1となり、変数iに1を代入します。

一方、郵便番号にT_住所マスタにない郵便番号を入力した場合はレコード件数が0となり、変数iに0を代入します。

変数iの値で条件分岐

【目次3.2: 条件に合致したレコード件数を取得】で変数iには入力した郵便番号に合致したレコード件数が入っていることを確認しました。

その変数iの値を使って、入力した郵便番号に合致したレコードがある場合とない場合の処理をIf文を使って分岐しています。


i >0(入力した郵便番号に合致したレコードがある)の場合は郵便番号に対応する住所を変数jyusyoに代入する。

郵便番号を5152305と入力すると変数jyusyoには嬉野一志町が代入される

住所が表示されるtxt住所に変数jyusyoの値(嬉野一志町)を代入する。

これが郵便番号を入力して、該当する住所があった場合に自動で表示する仕組みとなります。


i >0以外( 入力した郵便番号に合致したレコードがない)の場合は「該当データがありません!!」のメッセージボックスを出しています。


なぜ、このような条件分岐をするのかというと、エラー対応のためです。

もし、条件分岐をせず、

とした場合、入力した郵便番号に合致したレコードがないと、

Nullの使い方が不正です

というAccessのエラーメッセージが出ます。

このエラーメッセージが出たときに、

郵便番号の入力を誤ったのかな

と思える想像力お化けの人はまれだと思うので、はっきりと分かるメッセージを出してあげましょう。

さいごに

汎用性の高いコードなので、様々な入力フォームで活用できると思います。

少しでも効率化につながり、Accessって便利かもって感じていただけたら幸いです。

最後まで読んでいただきありがとうございました。