DLookup 関数

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

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

DLookup関数を使用して、フォームまたはレポートのレコード ソースにないフィールドの値を表示できます。 たとえば、"注文の詳細" テーブルに基づくフォームがあるとします。 フォームには、 OrderIDProductIDUnitPriceQuantityDiscount の各フィールドが表示されます。 ただし、 ProductName フィールドは別のテーブル ( Products テーブル) にあります。 計算コントロールの DLookup 関数を使用して、同じフォームに ProductName を表示できます。

構文

DLookup(expr, domain [, criteria])

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

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

解説

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

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

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

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

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

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

表示する必要があるフィールドがフォームまたはレポートの基になっているレコード ソースにない場合は、フォームまたはレポートの計算コントロールの式で DLookup 関数を使用することもできます。 たとえば、ProductID フィールドを表示する ProductID というテキスト ボックスを含む Order Details テーブルに基づく Order Details フォームがあるとします。 テキスト ボックスの値に基づいて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 が実行されるたびに、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)