Microsoft Access Club >SampleFile >インデックス >このページ


DLookup 関数:SampleFileHelp



指定されたレコードのセット (定義域 (定義域 : テーブル、クエリ、または SQL 式で定義されるレコードのセット。定義域集計関数は、特定の定義域またはレコードのセットに関する統計的な情報を返します。)) に含まれるフィールドの値を返します。

Visual Basic、マクロ (マクロ : 1 つまたは複数のアクションを自動的に実行させるための仕組み。マクロは Visual Basic for Applications プログラミング言語で記述します。)、クエリ式、またはフォームやレポートの演算コントロール (演算コントロール : 演算結果を表示するコントロール。フォーム、レポート、またはデータ アクセス ページで使用します。

演算結果は、式の値が変わるたびに再計算されます。)で使うことができます。

DLookup 関数を使うと、基になるレコード ソースにないフィールドの値をフォームやレポートに表示することができます。たとえば、演算コントロールで DLookup 関数を使って、[商品] テーブルにある [商品名] フィールドを、[受注明細] テーブルを基にするフォームに表示することができます。

 

DLookup(expr, domain, [criteria])

 

DLookup 関数の引数

引数 内容
expr 対象となるデータが含まれているフィールドを表す文字列式 (文字列式 : 1 つの文字列として評価される式。文字列を返す関数、VarType 8 (文字列) のバリアント型 (Variant) の値を返す関数、リテラル文字列、文字列定数、文字列変数、またはバリアント型 (Variant) 文字列を組み合わせて構成します。)、またはフィールドの値の計算を表す式です。expr には、テーブルのフィールド名、フォームのコントロール、定数、組み込み関数、およびユーザー定義関数が指定できます。ただし、ほかの定義域集計関数や SQL 集計関数を expr に指定することはできません。
domain 定義域を構成するレコードを指定する文字列式です。パラメータを必要としないクエリには、テーブル名またはクエリ名が指定できます。
criteria この引数は省略可能です。DLook 関数の演算対象となるデータの範囲を指定する文字列式です。たとえば、criteria には SQL 式の WHERE 句を指定できます (語 WHERE は省略します)。引数 criteria を省略すると、DLook 関数は定義域全体に対して expr を適用します。criteria に含まれるフィールドが domain のフィールドでない場合、DLookup 関数は Null (Null 値 : データが存在しないこと、またはデータが不定であることを示すために、フィールドに入力したり式およびクエリで使用する値。Visual Basic の Null キーワードは Null 値を表します。主キー フィールドなど、Null 値を格納できないフィールドもあります。) 値を返します。
 


解説

DLookup 関数は、引数 criteria で指定した情報に基づいてフィールド値を 1 つ返します。引数 criteria は省略可能です。

criteria に適合するレコードがないときや、domain にレコードが含まれないときは、DLookup 関数は Null 値を返します。

抽出条件を満たすレコードが複数見つかった場合、DLookup 関数は最初のレコードのフィールド値を返します。DLookup 関数が固有のフィールド値を返すように抽出条件を指定してください。次の例では、主キー (主キー : テーブル内の各レコードを一意に識別する値を持つフィールド (列)。主キーには Null 値を含めることができません。また、必ず一意のインデックスを持つ必要があります。主キーは、テーブルと他のテーブルの外部キーを関連付ける際に使用されます。)である [社員コード] フィールドの値を DLookup 関数の抽出条件に使います。

Dim varX As Variant
varX = DLookup("[氏名]", "社員", "[社員コード] = 1")

DLookup 関数をマクロ、モジュール、クエリ式、または演算コントロールのいずれで使用する場合も、正確な結果を得るために引数 criteria を慎重に設定してください。

DLookup 関数を使って、クエリの [抽出条件] セル、クエリの演算フィールドの式、または更新クエリ (更新クエリ : 指定する抽出条件 (検索条件) に従ってレコードのセットを変更するアクション クエリ (SQL ステートメント) です。)の [レコードの更新] 行に抽出条件を指定できます。

フォームやレポートの演算コントロールの式で DLookup 関数を使うと、基になるレコード ソースにないフィールドをフォームやレポートに表示することができます。たとえば、[受注明細] テーブルを基にする[受注明細] フォームに、[商品コード] フィールドを表示する [商品コード] というテキスト ボックスがあるとします。[商品コード] の値に基づいて [商品] テーブルから [商品名] を参照する場合は、別のテキスト ボックスを作成し、その "ControlSource/コントロールソース" プロパティに次の式を設定します。

=DLookup("[商品名]", "商品", "[商品コード] =" _
         & Forms![受注明細]!商品コード)
 
ヒント
  • DLookup 関数を使って外部キー側のテーブル (外部キー側のテーブル : データベース内の別のテーブル (得意先など) で、主キー フィールドになっている外部キー フィールド (得意先コードなど) を含むテーブル (得意先受注など) のこと。ほとんどの場合、外部キー側のテーブルは、一対多リレーションシップの "多" 側のテーブルになります。)のフィールドの値を表示することもできますが、必要なフィールドをすべて含んだクエリを作成し、そのクエリに基づいてフォームやレポートを作成する方が効率的です。
  • ルックアップ ウィザードを使って外部キー側のテーブルの値を検索することもできます。

メモ   domain のレコードを変更しても、保存されていない値は DLookup 関数の演算に反映されません。変更した値を使って計算する場合は、計算前に、[レコード] メニューの [レコードの保存] をクリックするか、フォーカスを別のレコードに移動するか、または Update メソッドを使って変更を保存する必要があります。

 

 

使用例

次の例では、条件を満たすレコードの [得意先名] フィールドの値を返します。定義域は [得意先] テーブルです。[得意先コード] フィールドの値が 1 であるレコードだけが演算の対象になります。

Dim varX As Variant
varX = DLookup("[得意先名]", "得意先", "[得意先コード] = 1")


次の例では、引数 criteria に [得意先コード] コントロールが指定されています。コントロールへの参照が、文字列を示す引用符に囲まれていないことに注意してください。DLookup 関数が呼び出されるたびに、コントロールの現在の値を得ることができます。

Dim varX As Variant
varX = DLookup("[得意先名]", "得意先", "[得意先コード] = " _
                & Forms!得意先!得意先コード)

次の例では、変数 intSearch を使って値を参照しています。

Dim intSearch As Integer
Dim varX As Variant

intSearch = 1
varX = DLookup("[得意先名]", "得意先","[得意先コード] = " & intSearch)
 
 

関連ページ


DLookup 関数


 

-Microsoft Access Club-