DLookup 関数

適用先
Access for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

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

DLookup 関数を使用すると、フォームまたはレポートのレコード ソースにないフィールドの値を表示できます。 たとえば、"注文の詳細" テーブルに基づくフォームがあるとします。 フォームには、[ OrderID]、[ ProductID]、[ UnitPrice]、[ Quantity]、および [ Discount ] フィールドが表示されます。 ただし、 ProductName フィールドは別のテーブルである Products テーブルにあります。 演算コントロールで DLookup 関数を使用すると、同じフォームに ProductName を表示できます。

構文

DLookup(expr, domain [, criteria])

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

引数 説明
expr 必須。 値を返すフィールドを識別する式。 テーブルまたはクエリ内のフィールドを識別する文字列式、またはそのフィールド内のデータに対して計算を実行する式を指定することができます。 expr では、テーブル内のフィールド名、フォーム上のコントロール、定数、または関数の名前を含めることができます。 expr関数が含まれている場合は、組み込み関数またはユーザー定義関数を使用できますが、別のドメイン集計または集計関数SQLできません。
domain 必ず指定します。 ドメインを構成するレコード セットを識別する文字列式。 テーブル名またはパラメーターを必要としないクエリのクエリ名を指定できます。
criteria 省略可能です。 DLookup 関数が実行されるデータの範囲を制限するために使用される文字列式。 たとえば、criteria は、WHEREという単語を含まない、SQL式の WHERE 句に相当することがよくあります。 criteriaを省略すると、DLookup 関数はドメイン全体に対してexprを評価します。 criteria に含まれるフィールドは、domain のフィールドでなければなりません。 それ以外の場合、 DLookup 関数は Null を返します。

解説

DLookup 関数は、criteria で指定された情報に基づいて 1 つのフィールド値を返します。 criteria は省略可能ですが、値を指定しないと、DLookup 関数はドメイン内のランダムな値を返します。

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

複数のフィールドが criteria を満たす場合、 DLookup 関数は最初の出現を返します。 DLookupによって返されるフィールド値が確実に一意である条件を指定する必要があります。 DLookupが一意の値を返すように、次の例の [EmployeeID] など、抽出条件に主キー値を使用することがよいでしょう。

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

DLookup 関数をマクロやモジュール、クエリ式、または演算コントロールのいずれで使用する場合でも、criteria 引数を慎重に構成して、Access が正しく評価されるようにしてください。

DLookup 関数を使うと、クエリの [抽出条件] 行、クエリの集計フィールド式、または更新クエリの [更新先] 行で抽出条件を指定できます。

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

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

ヒント

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

この関数を使用する場合、 domain のレコードに対する未保存の変更は含まれません。 変更した値を使用するDLookupには、まず [データ] タブの [レコード] の [レコード] をクリックし、フォーカスを別のレコードに移動するか、Update メソッドを使用して変更を保存します。

使用例

次の例は、Visual Basic for Applications (VBA) モジュールでのこの関数の使用方法を示しています。 VBA の操作の詳細については、「 Access VBA リファレンス」を参照してください。

次の例では、criteriaを満たすレコードの CompanyName フィールドから名前の情報を返します。 ドメインは Shippers テーブルです。 criteria 引数は、結果のレコード セットを、ShipperID1 に等しいレコード セットに制限します。

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

Shippers テーブルの次の例では、フォーム コントロール ShipperIDを使用して、DLookup 関数に条件を指定します。 コントロールへの参照は、文字列を示す引用符で囲まれていません。 これにより、 DLookup を実行するたびに、コントロールから現在の値が取得されます。

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)