DLookup 関数

Access デスクトップ データベースでは、DLookup 関数を使って、指定したレコードセット (ドメイン) の特定のフィールドの値を取得できます。 Visual Basic for Applications (VBA) モジュール、マクロ、クエリ式、またはフォームやレポートの演算コントロールで、DLookup 関数を使用します。

注: この記事は、Access Web アプリには適用されません。

DLookup 関数を使って、フォームやレポートのレコード ソース内に存在しないフィールドの値を表示できます。 たとえば、"注文の詳細" テーブルに基づくフォームがあるとします。 このフォームには、"注文 ID"、"製品 ID"、"単価"、"数量"、"ディスカウント" の各フィールドが表示されます。 ただし "製品名" フィールドは、"製品" テーブルという別のテーブルにあります。 演算コントロールで DLookup 関数を使って、同じフォームに製品名を表示することができます。

構文

DLookup( expr, domain [, criteria] )

DLookup 関数の構文には、次の引数があります。

引数

説明

expr

必須。 値を返すフィールドを識別する式。 テーブルやクエリ内のフィールドを識別する文字列式であることもあれば、対象フィールド内のデータに対して計算を実行する式である場合もあります。 expr では、テーブル内のフィールド、フォームのコントロール、定数、または関数の名前を指定することができます。 expr で関数を指定する場合、その関数は組み込みでもユーザー定義でもかまいませんが、別の定義域の集計関数または SQL 集計関数は使えません。

定義域

必須。 定義域を構成するレコード セットを識別する文字列式。 テーブル名の場合もあれば、パラメーターを必要としないクエリのクエリ名の場合もあります。

criteria

省略可能です。 DLookup 関数の実行対象となるデータ範囲を制限する文字列式。 たとえば、criteria は多くの場合、WHERE という語句がないだけで、SQL 式の WHERE 句と同等です。 criteria を省略した場合、DLookup 関数は、定義域全体に対して expr を評価します。 criteria に含めるすべてのフィールドは、domain 内のフィールドであることも必要です。そうでない場合、DLookup 関数は Null を返します。

解説

DLookup 関数は、criteria で指定された情報に基づく、単一フィールド値を返します。 criteria は省略可能な引数ですが、criteria の値を指定しない場合、DLookup 関数は定義域内のランダム値を返します。

criteria を満たすレコードがない場合、または domain にレコードが含まれていない場合、DLookup 関数は Null を返します。

複数のフィールドが criteria を満たす場合、DLookup 関数は最初に条件を満たしたものを返します。 DLookup 関数が返すフィールド値が一意となる条件を指定してください。 DLookup 関数が確実に一意の値を返すように、次の例の [EmployeeID] のように、条件に 主キー 値を使用することをお勧めします。

Dim varX As Variant
varX = DLookup("[LastName]", "Employees", _
"[EmployeeID] = 1")

マクロ、モジュール、クエリ式、または演算コントロールのいずれで DLookup 関数を使っても、正しく評価されるように criteria 引数を慎重に構築する必要があります。

DLookup 関数を使って、クエリ内の [条件] 行、クエリ式の集計フィールド、または 更新クエリ の [更新対象] 行で条件を指定できます。

また、表示する必要があるフィールドが、フォームやレポートのベースとなるレコード ソース内に存在しない場合、フォームやレポートの演算コントロールの式で DLookup 関数を使うこともできます。 たとえば、"注文詳細" テーブルに基づく "注文詳細" フォームがあり、そのフォームに "製品 ID" フィールドを表示する [製品 ID] というテキスト ボックスがあるとします。 テキスト ボックスの値に基づいて "製品" テーブルから製品名を検索するには、別のテキスト ボックスを作成して、その ControlSource プロパティを次の式に設定します。

=DLookup("[ProductName]", "Products", "[ProductID] =" & Forms![Order Details]!ProductID)

ヒント

  • DLookup 関数を使って外部テーブルのフィールドから抽出した値を表示することはできますが、両方のテーブルから値を抽出する必要があるフィールドを含むクエリを作成してから、そのクエリに基づいてフォームやレポートを作成する方が効率的な場合があります。

  • また、ルックアップ ウィザードを使って、外部テーブルの値を検索することもできます。

注: この関数を使用する場合、domain 内のレコードに対する未保存の変更は含まれません。 変更した値に基づいて DLookup 関数を実行する場合は、[データ] タブの [レコード] にある [レコードの保存] をクリックして、別のレコードへフォーカスを移動するか、または Update メソッドを使用して、最初に変更を保存する必要があります。

使用例

注: 次の例は、Visual Basic for Applications (VBA) モジュールでのこの関数の使用方法を示しています。 VBA の動作に関する詳細については、[検索] の横にあるドロップダウン リストの [開発者用リファレンス] を選んで、検索ボックスに語句を 1 つ以上入力してください。

次の例は、criteria を満たすレコードの "会社名" フィールドからの名前情報を返します。 定義域は、"運送会社" テーブルです。 criteria 引数により、生成されるレコード セットは、"運送会社 ID" が 1 のレコードに制限されます。

Dim varX As Variant
varX = DLookup("[CompanyName]", _
"Shippers", "[ShipperID] = 1")

"運送会社" テーブルからの次の例では、フォーム コントロール "運送会社 ID" を使って、DLookup 関数の条件を提供します。 コントロールに対するリファレンスは、文字列を示す引用符に含まれていません。 このため、DLookup 関数が呼び出されるたびに、Access ではコントロールから現在の値を取得します。

Dim varX As Variant
varX = DLookup("[CompanyName]", "Shippers", _
"[ShipperID] = " & Forms!Shippers!ShipperID)

次の例では、変数 intSearch を使って、この値を取得します。

Dim intSearch As Integer
Dim varX As Variant
intSearch = 1
varX = DLookup("[CompanyName]", "Shippers", _
"[ShipperID] = " & intSearch)
Office のスキルを磨く
トレーニングの探索
新機能を最初に入手
Office Insider に参加する

この情報は役に立ちましたか?

ご意見をいただきありがとうございます。

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×