pickup

目次

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に関しては、参照は、なるべくオートルックアップクエリを使いましょう。

サンプルファイルNo16はです
スポンサーリンク

Twitterでフォローしよう

おすすめの記事