デスクトップ データベース 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 関数は、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 の操作の詳細については、「Access VBA リファレンス」を参照してください。
次の例は、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)