Access デスクトップ データベースでは、 DLookup 関数を使用して、指定したレコードセット (ドメイン) から特定のフィールドの値を取得できます。 Visual Basic for Applications (VBA) モジュール、マクロ、クエリ式、またはフォームまたはレポートの計算コントロールで DLookup 関数を使用します。
DLookup 関数を使って、フォームやレポートのレコード ソース内に存在しないフィールドの値を表示できます。 たとえば、"注文の詳細" テーブルに基づくフォームがあるとします。 このフォームには、"注文 ID"、"製品 ID"、"単価"、"数量"、"ディスカウント" の各フィールドが表示されます。 ただし "製品名" フィールドは、"製品" テーブルという別のテーブルにあります。 演算コントロールで DLookup 関数を使って、同じフォームに製品名を表示することができます。
構文
DLookup(expr, domain [, criteria] )
DLookup 関数の構文には、次の引数があります。
| 引数 | 説明 |
|---|---|
| expr | 必須。 値を返すフィールドを識別する式。 テーブルまたはクエリ内のフィールドを識別する文字列式、またはそのフィールド内のデータに対して計算を実行する式を指定できます。 expr では、テーブル内のフィールドの名前、フォーム上のコントロール、定数、または関数を含めることができます。 expr に関数が含まれている場合は、組み込み関数またはユーザー定義関数を使用できますが、別のドメイン集計関数や SQL 集計関数は使用できません。 |
| domain | 必須。 定義域を構成するレコード セットを識別する文字列式。 テーブル名の場合もあれば、パラメーターを必要としないクエリのクエリ名の場合もあります。 |
| criteria | 省略可能です。 DLookup 関数を実行するデータ範囲を制限するために使用される文字列式。 たとえば、 条件 は、多くの場合、WHERE という単語を含まない SQL 式の WHERE 句と同じです。 条件を省略すると、DLookup 関数はドメイン全体に対して expr を評価します。 条件に含まれるフィールドは、ドメイン内のフィールドである必要もあります。それ以外の場合、DLookup 関数は Null を返します。 |
解説
DLookup 関数は、条件で指定された情報に基づいて 1 つのフィールド値を返します。 criteria は省略可能な引数ですが、条件の値を指定しない場合、DLookup 関数はドメイン内のランダムな値を返します。
条件を満たすレコードがない場合、またはドメインにレコードが含まれている場合、DLookup 関数は Null を返します。
複数のフィールドが 条件を満たしている場合、 DLookup 関数は最初の出現箇所を返します。
DLookup 関数が返すフィールド値が一意となる条件を指定してください。 次の例の [EmployeeID] など、条件の主キー値を使用して、 DLookup 関数が一意の値を確実に返すようにすることができます。
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 関数を使用して外部テーブルのフィールドの値を表示できますが、両方のテーブルから必要なフィールドを含むクエリを作成し、そのクエリに基づいてフォームまたはレポートを作成する方が効率的な場合があります。
- また、ルックアップ ウィザードを使って、外部テーブルの値を検索することもできます。
注
この関数を使用する場合、 ドメイン 内のレコードに対する未保存の変更は含まれません。 変更した値に基づいて DLookup 関数を実行する場合は、[データ] タブの [レコード] にある [レコードの保存] をクリックして、別のレコードへフォーカスを移動するか、または Update メソッドを使用して、最初に変更を保存する必要があります。
使用例
注
次の例は、Visual Basic for Applications (VBA) モジュールでのこの関数の使用方法を示しています。 VBA の操作の詳細については、「 Access VBA リファレンス」を参照してください。
次の例では、 条件を満たすレコードの CompanyName フィールドから名前情報を返します。 定義域は、"運送会社" テーブルです。 criteria 引数は、結果のレコードセットを ShipperID が 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)