DLookup メソッド (Access)Application.DLookup method (Access)

DLookup 関数は、指定されたレコードのセット (定義域) から、特定のフィールドの値を返します。You can use the DLookup function to get the value of a particular field from a specified set of records (a domain).

構文Syntax

DLookup (,ドメイン,抽出条件)expression.DLookup (Expr, Domain, Criteria)

expression**Application** オブジェクトを 表す変数。expression A variable that represents an Application object.

パラメーターParameters

名前Name 必須 / オプションRequired/Optional データ型Data type 説明Description
ExprExpr 必須Required StringString 値を返すフィールドを識別する式。An expression that identifies the field whose value you want to return. テーブルまたはクエリのフィールドを識別する文字列式であることもあれば、対象フィールド内のデータに対して計算を実行する式である場合もあります。 It can be a string expression identifying a field in a table or query, or it can be an expression that performs a calculation on data in that field. expr では、テーブルのフィールド、フォームのコントロール、定数、または関数の名前を指定できます。In expr, you can include the name of a field in a table, a control on a form, a constant, or a function. _Expr_に関数を指定する場合は、組み込み関数またはユーザー定義関数のどちらも指定できますが、他の定義域集計関数または SQL 集計関数は使用できません。If expr includes a function, it can be either built-in or user-defined, but not another domain aggregate or SQL aggregate function.
ドメインDomain 必須Required StringString 定義域を構成するレコードセットを識別する文字列式。A string expression identifying the set of records that constitutes the domain. パラメーターを必要としないクエリには、テーブル名またはクエリ名が指定できます。It can be a table name or a query name for a query that does not require a parameter.
CriteriaCriteria オプションOptional VariantVariant DLookup関数が実行されるデータの範囲を制限するために使用するオプションの文字列式です。An optional string expression used to restrict the range of data on which the DLookup function is performed. たとえば、 criteria は多くの場合、SQL 式の WHERE 句と同じ役割を果たします (ただし WHERE という語は使用しません)。For example, criteria is often equivalent to the WHERE clause in an SQL expression, without the word WHERE. _Criteria_が省略された場合、 DLookup関数は、ドメイン全体に対して_expr_を評価します。If criteria is omitted, the DLookup function evaluates expr against the entire domain. _抽出条件_に含まれているフィールドは、_ドメイン_のフィールドでもある必要があります。それ以外の場合、 DLookup関数はNull値を返します。Any field that is included in criteria must also be a field in domain; otherwise, the DLookup function returns a Null.

戻り値Return value

バリアント型Variant

注釈Remarks

DLookup関数を使用すると、フォームまたはレポートのレコードソースにないフィールドの値を表示することができます。You can use the DLookup function to display the value of a field that isn't in the record source for your form or report. たとえば、[受注明細] テーブルに基づくフォームがあるとします。For example, suppose you have a form based on an Order Details table. このフォームには、 OrderIDProductIDUnitPrice数量、および割引の各フィールドが表示されます。The form displays the OrderID, ProductID, UnitPrice, Quantity, and Discount fields. ただし、[商品] フィールドは別のテーブルである Products テーブルに含まれています。However, the ProductName field is in another table, the Products table. 演算コントロールでDLookup関数を使用すると、商品名を同じフォームに表示することができます。You could use the DLookup function in a calculated control to display the ProductName on the same form.

DLookup関数は、 _criteria_で指定された情報に基づいて1つのフィールド値を返します。The DLookup function returns a single field value based on the information specified in criteria. 引数_criteria_は省略可能ですが、_抽出条件_に値を指定しない場合、 DLookup関数は、ドメイン内でランダムな値を返します。Although criteria is an optional argument, if you don't supply a value for criteria, the DLookup function returns a random value in the domain.

_検索条件_に一致するレコードがない場合、または_domain_にレコードが含まれていない場合、 DLookup関数はNull値を返します。If no record satisfies criteria, or if domain contains no records, the DLookup function returns a Null.

複数のフィールドが_抽出条件_を満たす場合、 DLookup関数は、最初の文字列を返します。If more than one field meets criteria, the DLookup function returns the first occurrence. 抽出条件を指定する際には、 DLookup 関数が返すフィールド値が常に一意となるように条件を指定してください。You should specify criteria that will ensure that the field value returned by the DLookup function is unique. 次の例の [EmployeeID] のように、抽出条件に主キーの値を使うことで、 DLookup 関数が確実に一意の値を返すようにすることができます。You may want to use a primary key value for your criteria, such as [EmployeeID] in the following example, to ensure that the DLookup function returns a unique value:

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

DLookup関数をマクロ、モジュール、クエリ式、または演算コントロールのいずれで使用する場合も、正確な結果を得るために引数_criteria_を慎重に設定しなければなりません。Whether you use the DLookup function in a macro or module, a query expression, or a calculated control, you must construct the criteria argument carefully to ensure that it will be evaluated correctly.

DLookup関数を使って、クエリの [抽出条件] 行、クエリの演算フィールドの式、または更新クエリの [レコードの更新] 行に抽出条件を指定できます。You can use the DLookup function to specify criteria in the Criteria row of a query, within a calculated field expression in a query, or in the Update To row in an update query.

また、フォームやレポート上の演算コントロールの式に DLookup 関数を使って、基になっているレコード ソースにないフィールドをフォームやレポートに表示することもできます。You can also use the DLookup function in an expression in a calculated control on a form or report if the field that you need to display isn't in the record source on which your form or report is based. たとえば、[受注明細] テーブルに基づく [受注明細] フォームに、[商品コード] フィールドを表示する productid というテキストボックスがあるとします。For example, suppose you have an Order Details form based on an Order Details table with a text box called ProductID that displays the ProductID field. テキストボックスの値に基づいて Products テーブルから [商品] を参照するには、別のテキストボックスを作成し、その "ControlSource/コントロールソース" プロパティを次の式に設定します。To look up ProductName from a Products table based on the value in the text box, you could create another text box and set its ControlSource property to the following expression:

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

ヒント

  • DLookup 関数を使って外部キー側のテーブルのフィールドの値を表示することもできますが、必要なフィールドをすべて含んだクエリを作成し、そのクエリに基づいてフォームやレポートを作成する方が効率的です。Although you can use the DLookup function to display a value from a field in a foreign table, it may be more efficient to create a query that contains the fields that you need from both tables and then to base your form or report on that query.
  • ルックアップ ウィザードを使って外部キー側のテーブルの値を検索することもできます。You can also use the Lookup Wizard to find values in a foreign table.

Example

次の例では、_条件_を満たすレコードのCompanyNameフィールドから名前情報を返します。The following example returns name information from the CompanyName field of the record satisfying criteria. 定義域は [得意先] テーブルです。The domain is a Shippers table. 引数_criteria_には、ShipperID が1に等しいレコードを指定します。The criteria argument restricts the resulting set of records to those for which ShipperID equals 1.

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

次の使用例は、[仕入れ先] テーブルから、フォームコントロール ShipperID を使用してDLookup関数の抽出条件を指定します。The next example from the Shippers table uses the form control ShipperID to provide criteria for the DLookup function. コントロールへの参照は、文字列を示す引用符に含まれていないことに注目してください。Note that the reference to the control isn't included in the quotation marks that denote the strings. このため、DLookup 関数が実行されるたびに、Microsoft Access はコントロールから現在の値を取得します。This ensures that each time the DLookup function is called, Microsoft Access will obtain the current value from the control.

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

次の例では、変数intSearchを使用して値を取得しています。The next example uses a variable, intSearch, to get the value.

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

以下の例は、DLookup 関数でさまざまな種類の抽出条件を使用する方法を示します。The following examples show how to use various types of criteria with the DLookup function.

    ' ***************************
    ' 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")
    ' ***************************

次の例は、Do ループで**DLookUp**を使用する方法を示しています。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.
' 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

サポートとフィードバックSupport and feedback

Office VBA またはこの説明書に関するご質問やフィードバックがありますか?Have questions or feedback about Office VBA or this documentation? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.