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関数を使って、フォームの機能を充実させることにチャレンジしてみてください。

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

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

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

ちょっとした悩みを解決        



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