目次
ExcelのVLOOKUP関数と同等の機能をもつDLOOKUP関数
こんにちは。伊川(@naonaoke)です。
今回は、DLOOKUP関数について説明します。
Excelから、ACCESSに移行して、最初にめぐり合う関数がDLOOKUP関数ではないでしょうか?
問題提起
Aさんは、上司から、下記のようなデータベースを作成するように言われました。
・社員氏名を入力したら、社員IDを表示する。
・社員IDを入力したら、社員氏名を表示する。
Aさんは、ExcelでVLOOKUP関数は知っていますが、ACCESSでは検索する関数を知りません。
どうしたら、いいだろうか?
検索フォームの作成手順
上の図のような検索フォームを2つ作成します。
1つの検索フォームでもいいのですが、今回は、2つ作成します。
向かって左側の検索フォーム
社員IDが入力されたら、社員氏名を表示させる
向かって右側の検索フォーム
社員氏名が入力されたら、社員IDを表示させる
作成についての注意点
上の図のフォームは、すべて非連結のテキストボックスで作成しています。
また、向かって右側の検索フォームは、社員氏名をコンボボックスにしています。
コンボボックスの作成は下記の記事を参照してください
DLOOKUP関数を入力する
DLOOKUP関数を設定したい検索フォームをデザインビューで開きます。
そして、社員IDの隣の非連結というボックスを選択いて、【F4】を押します。
上の図が、みなさんの向かって右側に表示されます。
その時に、更新後処理の隣を、イベントプロシージャにします。
Private Sub 社員ID_AfterUpdate() Me.[社員氏名] = DLookup("社員氏名", "MT_社員名簿", "社員ID =" & Me.[社員ID] & "") End Sub
上記のコードを記載すると完成です。
数式は音読してみる
DLOOKUPで探せという命令をする。
何を探しているのか?⇒社員氏名
社員氏名はどこにある?⇒MT_社員名簿
どうやって探す?⇒このフォームの社員IDと、MT_社員名簿の社員IDが一致したもの
※MeはよくACCESSのVBA作成で出てきます。Meは、このフォームという意味です。
完成です。
同じ要領で、作成するとエラーが表示される?
よく私に質問が来ます。
ACCESSが理解しにくい点の1つでしょう。
上の図を見てください。
ACCESSには、データ型があります。
社員IDは、数値型
社員氏名は、短いテキスト型(文字型)
テキスト型と数値型では、記載の方法が違います。
コードを比べてみよう
これが、超重要です。
これを理解できないと、VBAを記載しても、上の図のようなエラーでます。
しかも、ACCESSは初めてで、Excelでは、このようなエラーは表示されないから、Aさんは挫折したくなります。
まさか、たったシングルクォテーションがたりないだけ?とは、夢にも思わないと思います。
数値型の検索
Private Sub 社員ID_AfterUpdate() Me.[社員氏名] = DLookup("社員氏名", "MT_社員名簿", "社員ID =" & Me.[社員ID] & "") End Sub
テキスト型の検索
Private Sub 社員氏名_AfterUpdate() Me.[社員ID] = DLookup("社員ID", "MT_社員名簿", "社員氏名='" & Me.[社員氏名] & "'") End Sub
まとめ
伊川に関しては、DLOOKUP関数は、ほとんど使いません。
それはなぜか?
オートルックアップクエリがあるからです。
ACCESSに関しては、参照は、なるべくオートルックアップクエリを使いましょう。