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って便利かもって感じていただけたら幸いです。

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

>ちょっとした悩みを解決        

ちょっとした悩みを解決        



「こういう内容を記事に残してほしい」「これってどうやるの」等、意見・要望があればご連絡ください。
ちょっとでもお役に立てるブログにしていきたいなと思っております。
よろしくお願いいたします。