DLookup関数を使いこなす【Access】

こんにちはmasalifeです。

Accessの力を最大限に発揮させるためには、関数の知識が必要不可欠です。

僕が多くのシステム構築をしてきた経験から、

この関数は覚えといた方がいい

というものを順に紹介していきたいと思います。

今回紹介するのは、

DLookup関数

です。

テーブルやクエリから指定した条件のフィールドの値を参照する

ときに使います。

DLookup関数を使いこなせるようになると、作成する入力フォームの機能が充実します。

Accessでツール構築をしている方、したい方は知っていないと損ですよ。

DLookup関数とは?

【構文】

microsoft-officeサポートでは次のように示されています。

DLookup(expr, domain[, criteria])

*microsoft-officeサポートより引用

引数省略の可否説明
expr参照するフィールド名
domain参照するテーブル名・クエリ名
criteria抽出条件

criteriaを省略すると全レコードが対象となる。

クエリでの使用:異なるテーブルから値を参照する

使用頻度は高くないですが、クエリを使って、異なるテーブルから値を参照してみます。


T_会員ごと使用日(テーブル)には会員IDの情報しかないため、該当の会員名をT_会員マスタ(テーブル)から参照してフィールドに表示させます。


クエリをデザインビューで開いて、T_会員ごと使用日のテーブルを追加します。

新たなフィールドに、

会員名: DLookUp(“会員名”,”T_会員マスタ”,”会員ID = ‘” & [会員ID] & “‘”)

と記述します。

*抽出条件は会員IDのデータ型がテキスト型の場合の記述方法


記述した引数を整理すると次のとおりとなります。

引数説明
“会員名”会員名を参照したいので、会員名フィールドを指定
“T_会員マスタ”参照したい会員名フィールドがあるT_会員マスタテーブルを指定
“会員ID = ‘” & [会員ID] & “‘”・T_会員マスタテーブルの会員IDフィールドの値とデザインしているクエリの会員IDフィールドが一致の条件を指定
・ただし、この記述は会員IDフィールドのデータ定義がテキスト型に有効
数値型の場合は“会員ID = ” & [会員ID]と記述

重要な点として、クエリのフィールドを指定するときは[]で囲む必要があります。

“会員ID = ‘” & [会員ID] & “‘” の最初の会員IDはT_会員マスタの会員IDフィールドで次の会員IDはクエリの会員IDフィールドであることを明示しています。


クエリを実行すると、

正しく参照されていることが確認できます。


感のいい方はすでにお気づきだと思いますが、実際にはこの使い方の出番はほとんどありません。

なぜなら、クエリのリレーションシップで簡単に同様の参照ができるからです。

方法はクエリをデザインビューで開いて、2つのテーブル(T_会員ごと使用日・T_会員マスタ)を追加し、関連付ける項目である会員IDのフィールドをクリックしながら、もう一方のテーブルの会員IDフィールドにドラッグします。

リレーションの作成方法

フォーム(VBA)での使用:参照する値をメッセージとして出す

DLookup関数はフォームにVBAを組み込んで使用するのがメジャーです。

一例として、フォーム上から参照した値をメッセージボックスに出すプログラムを作成してみましょう。


作成する機能とフォームの概要は次のとおりです。

クリックすると別タブで開きます。

会員IDを選択して、【誕生日は?】のボタンをクリックすると、

該当の会員名と誕生日をテーブル(T_会員マスタ)から参照し、メッセージが表示される仕様とします。


参照するテーブル(T_会員マスタ)は次のとおりです。


ボタンに記述するVBAは次のとおりです。

criteria(抽出条件)を“会員ID = Forms![F_誕生日]![cmb会員ID]”とすることにより、

選択した会員IDにより参照する値が切り替わります。

「ユーザーが選択した条件で参照する値を流動的に変化させることができる」点でフォームと相性がいい関数と言えます。

その他の使い方が気になる方はこちらを読んでください。

合わせて読みたい

こんにちはmasalifeです。 今回はwebフォームでよく見かける 「郵便番号を入力したら、住所が自動で入力される機能」 をAccessで作る方法を紹介します。 作るイメージは次のとおりです。 […]

DLookup関数の注意点

次の場合は対象レコードの中から先頭のレコードが選ばれるという点に注意してください。

・引数criteria(抽出条件)を省略

・1レコードに絞りこめない抽出条件を指定

例えば、【目次1.3 フォーム(VBA)での使用:参照する値をメッセージとして出す 】のT_会員マスタに格納されているデータが次であった場合、

会員IDを4と選択して実行すると、

会員IDが4の2つのレコード(間瀬 次郎・6月15日/都築 誠・3月3日)の中で先頭のレコードである(間瀬 次郎・6月15日)が選択されます。


今回の例だと、会員IDは通常、一意の値であるべきなのに対して、重複した値が入っているのが不適切であるといえます。

抽出条件を指定する際には、そもそものテーブルがDLookup関数を使用するのに適切であるかを考えることも重要です。

さいごに

DLookup関数を使って、フォームの機能を充実させることにチャレンジしてみてください。

入力の効率化、検索の効率化に必ず繋がると思います。

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

>共に勉強しましょう!!

共に勉強しましょう!!



Accessの学習で悩んでいる方の相談に乗っています。
興味のある方は「Accessの勉強でお悩みの方へ」の記事を確認いただき、下部の【お問い合わせ】から連絡ください。