次の方法で共有


Application.DLookup メソッド (Access)

DLookup 関数を使用して、指定したレコードセット (ドメイン) から特定のフィールドの値を取得します。

構文

DLookup (Expr,Domain, Criteria)

expressionApplication オブジェクトを 表す変数。

パラメーター

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

戻り値

バリアント型

注釈

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

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

条件を満たすレコードがない場合、またはドメインにレコードが含まれている場合、DLookup 関数は Null を返します

複数のフィールドが 条件を満たしている場合、 DLookup 関数は最初の出現箇所を返します。 抽出条件を指定する際には、 DLookup 関数が返すフィールド値が常に一意となるように条件を指定してください。 次の例の [EmployeeID] のように、抽出条件に主キーの値を使うことで、 DLookup 関数が確実に一意の値を返すようにすることができます。

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

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

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

また、フォームやレポート上の演算コントロールの式に DLookup 関数を使って、基になっているレコード ソースにないフィールドをフォームやレポートに表示することもできます。 たとえば、 ProductID フィールドを表示する ProductID というテキスト ボックスがある Order Details テーブルに基づく Order Details フォームがあるとします。 テキスト ボックスの値に基づいて Products テーブルから ProductName を 検索するには、別のテキスト ボックスを作成し、 その ControlSource プロパティを次の式に設定します。

=DLookup("[ProductName]", "Products", "[ProductID] =" _ 
     & Forms![Order Details]!ProductID)

ヒント

  • DLookup 関数を使って外部キー側のテーブルのフィールドの値を表示することもできますが、必要なフィールドをすべて含んだクエリを作成し、そのクエリに基づいてフォームやレポートを作成する方が効率的です。
  • ルックアップ ウィザードを使って外部キー側のテーブルの値を検索することもできます。

次の例では、条件を満たすレコードの CompanyName フィールドから名前情報を返します。 定義域は [得意先] テーブルです。 criteria 引数は、結果のレコードセットを ShipperID が 1 と等しいレコードに制限します。

Dim varX As Variant 
varX = DLookup("[CompanyName]", "Shippers", "[ShipperID] = 1")

Shippers テーブルの次の例では、フォーム コントロール ShipperID を使用して DLookup 関数の条件を指定します。 コントロールへの参照は、文字列を示す引用符に含まれていないことに注目してください。 このため、DLookup 関数が実行されるたびに、Microsoft 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)

以下の例は、DLookup 関数でさまざまな種類の抽出条件を使用する方法を示します。

    ' ***************************
    ' Typical Use
    ' Numerical values. Replace "number" with the number to use.
    variable = DLookup("[FieldName]", "TableName", "[Criteria] = number")

    ' Strings.
    ' Numerical values. Replace "string" with the string to use.
    variable = DLookup("[FieldName]", "TableName", "[Criteria]= 'string'")

    ' Dates. Replace "date" with the string to use.
    variable = DLookup("[FieldName]", "TableName", "[Criteria]= #date#")
    ' ***************************

    ' ***************************
    ' Referring to a control on a form
    ' Numerical values
    variable = DLookup("[FieldName]", "TableName", "[Criteria] = " & Forms!FormName!ControlName)

    ' Strings
    variable = DLookup("[FieldName]", "TableName", "[Criteria] = '" & Forms!FormName!ControlName & "'")

    ' Dates
    variable = DLookup("[FieldName]", "TableName", "[Criteria] = #" & Forms!FormName!ControlName & "#")
    ' ***************************

    ' ***************************
    ' Combinations
    ' Multiple types of criteria
    variable = DLookup("[FieldName]", "TableName", "[Criteria1] = " & Forms![FormName]![Control1] _
             & " AND [Criteria2] = '" & Forms![FormName]![Control2] & "'" _
            & " AND [Criteria3] =#" & Forms![FormName]![Control3] & "#")
    
    ' Use two fields from a single record.
    variable = DLookup("[LastName] & ', ' & [FirstName]", "tblPeople", "[PrimaryKey] = 7")
            
    ' Expressions
    variable = DLookup("[Field1] + [Field2]", "tableName", "[PrimaryKey] = 7")
    
    ' Control Structures
    variable = DLookup("IIf([LastName] Like 'Smith', 'True', 'False')", "tableName", "[PrimaryKey] = 7")
    ' ***************************
```The following example shows how to use **DLookUp** in a Do Loop. It demonstrates how to build the Criteria string on each pass through the loop.

```vba
' The loop verifies data from an input data set, in this case Operating System names, 
' against those contained in a Master List.

Do Until I1 > NRec1
    ' An apostrophe is concatenated at the beginning and at the end of a datum referenced by "rs1!OS", 
    ' which is then concatenated to build the entire criteria string.
    Str_2 = "'" & rs1!OS & "'"
    Str_1 = "[OS] = " & Str_2
    
    J1 = DLookup("[ID]", "tbl_81_Operating_Systems_Master_List", Str_1)
    
    If IsNull(J1) = True Then
        ' If an OS name is not found, then a flag is set and the name of the unknown OS is output to a table.
        rs3.AddNew
        rs3.OS = rs1!OS
        rs3.Update
        Err_Fl = False

    End If

    rs1.MoveNext
    I1 = I1 + 1

Loop

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。