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 関数を使用して、フォームまたはレポートのレコード ソースにないフィールドの値を表示します。 たとえば、[受注明細] テーブルに基づくフォームがあるとします。 フォームには、 OrderID、 ProductID、 UnitPrice、 Quantity、および 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 のサポートおよびフィードバックを参照してください。