Applies ToAccess for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

デスクトップ データベース 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 VariantvarX = 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 VariantvarX = DLookup("[CompanyName]", _    "Shippers", "[ShipperID] = 1")

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

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

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

Dim intSearch As IntegerDim varX As VariantintSearch = 1varX = DLookup("[CompanyName]", "Shippers", _    "[ShipperID] = " & intSearch)

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。