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

注: この記事は、Access Web アプリには適用されません。

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 の動作に関する詳細については、[検索] の横にあるドロップダウン リストの [開発者用リファレンス] を選んで、検索ボックスに語句を 1 つ以上入力してください。

次の例は、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)

ヘルプを表示

スキルを磨く
トレーニングの探索
新機能を最初に入手
Microsoft Insider に参加する

この情報は役に立ちましたか?

翻訳品質にどの程度満足していますか?
どのような要因がお客様の操作性に影響しましたか?

フィードバックをお送りいただきありがとうございます!

×