文書番号: 285866 - 最終更新日: 2005年6月10日 - リビジョン: 5.2 [ACC2003] DLookup() の使い方、例、トラブルシューティング
この記事は、以前は次の ID で公開されていました: JP285866
難易度 : 低。シングル ユーザー コンピュータのユーザー インターフェイスに関する知識が必要です。
この資料は Microsoft Access データベース (.mdb)、および Microsoft Access プロジェクト (.adp) について記述したものです。 Microsoft Access 2000 については、次の資料を参照してください。 208786? (http://support.microsoft.com/kb/208786/ )
Microsoft Access 97 または 95 については、次の資料を参照してください。
136122?
(http://support.microsoft.com/kb/136122/
)
概要
この資料では、DLookup() 関数の使用法、例およびヒントを示します。
この資料では、以下の項目を取り扱います。
詳細DLookup() 関数の構文と使用法DLookup() 関数を式または Visual Basic for Applications (VBA) 関数の中で使用すると、定義域のフィールド値や指定されたレコードの集合を返すことができます。DLookup() 関数の構文は次のとおりです。 DLookup(Expression, Domain [, Criteria]) Expression 引数は、対象となる定義域内のデータが含まれているフィールドを指定したり、そのフィールドのデータを使用して計算を実行したりするために使用します。 Domain 引数は、定義域を指定するレコードセットの名前です。この引数には、テーブルまたはクエリを指定することができます。 Criteria 引数は省略可能な文字列式で、DLookup() 関数の実行対象となるデータの範囲を制限できます。Criteria 引数は SQL 式の WHERE 句に相当します (ただし、キーワード WHERE は使用しません)。 DLookup() 関数は、複数のレコードが抽出条件を満たす場合であっても、1 つのフィールドからは 1 つの値を返します。抽出条件を満たすレコードがない場合や、定義域にレコードが含まれていない場合、DLookup() は Null を返します。 DLookup() 関数の例以下の例は、DLookup() を使用して、テーブルやクエリの値を検索または取得する方法を示したものです。以下の例では、サンプル データベースの Northwind.mdb を参照します。また、それぞれの例は、フォームやレポート上にあるテキスト ボックスの ControlSource プロパティに入力することができます。注 : 以下の例の行末にあるアンダースコア (_) は行継続文字として使用されています。これらの式を作成し直す場合は、行末のアンダースコアを削除して次の行と連結してください。 抽出条件を指定しない場合この例では、抽出条件を一切指定しない最も単純な形式で DLookup() 関数を使用する方法を示します。この例は、[社員] テーブルにある最初のレコードの [氏名] フィールドに含まれる値を返します。
=DLookup("[氏名]", "社員")
数値抽出条件を指定する場合社員コードが 7 である社員の氏名を検索するには、次のように、使用するレコードの範囲を限定する抽出条件を指定します。
=DLookup("[氏名]", "社員", "[社員コード] = 7")
フォーム上のフィールドによる数値抽出条件を指定する場合先の例では式の中に特定の値を指定しましたが、抽出条件でパラメータを使用することもできます。次の例は、現在のフォーム上にある別のフィールドから抽出条件を指定する方法を示したものです。サンプル データベース Northwind.mdb の [受注] フォームでこれらの例を試すことができます。
=DLookup("[氏名]", "社員", _
"[社員コード] = Form![社員コード]")
=DLookup("[氏名]", "社員", _
"[社員コード] = " & [社員コード])
=DLookup("[氏名]", "社員", _
"[社員コード] = " & Forms![受注]![社員コード])
最初の例では、Form![社員コード] が抽出条件の引用符の中に置かれています。"Form" は、フィールド参照の "社員コード" が現在のフォームのものであることを示します。"Form" を指定しないと、"社員コード" と [社員] テーブルの社員コードそのものとが比較され、[社員] テーブルにある最初のレコードから氏名が返されます (抽出条件を何も指定しなかった場合と同じ結果になります)。なぜなら、[社員] テーブルにある最初のレコードは "社員コード" フィールドが 1 であるため、 "[社員コード] = [社員コード]" "1 = 1" 残り 2 つの例の抽出条件は、アンパサンド (&) を使用して 2 つの文字列式を連結したものになっています。3 番目の例では、抽出条件の最後がフォーム フィールドの参照になっています。 抽出条件の評価に際しては、まず抽出条件の各部が評価され、それらを追加または連結して全体の値が求められます。 [受注] フォーム上にある "社員コード" フィールドの現在の値が 7 の場合、元の抽出条件式 "[社員コード] = " & [社員コード] "[社員コード] = " & 7 "[社員コード] = 7" 次の例は、上記 3 番目の例から派生したものです。
=DLookup("[氏名]", "社員", _
"[社員コード] = Forms![受注]![社員コード]")
抽出条件が変更されたときにフィールドが自動的に更新されるようにする場合は、前述のように、式の各部を連結する方法を使用して、抽出条件を変数にします。新しいレコードに移動する際、[社員コード] ボックスに何かを入力するまでは、自動更新される DLookup() のテキスト ボックスには "#エラー" と表示されることに注意してください。 テキスト抽出条件を指定する場合以上の例はすべて、数値抽出条件と一緒に DLookup 関数を使用する方法を示したものです。抽出条件フィールドがテキストの場合は、次の例に示すように、単一引用符でテキストを囲みます。
=DLookup("[Title]", "社員", "[氏名] = '川村 匡'")
=DLookup("[Title]", "社員", "[氏名] = ""川村 匡""")
フォーム上のフィールドによるテキスト抽出条件を指定する場合次の例は、[受注] フォームの得意先に対応する得意先名を検索する方法を示したものです。"得意先コード" フィールドは抽出条件のテキスト キー フィールドであるため、DLookup() ステートメントは次のようになります。
=DLookup("[得意先名]", "[得意先]", _
"[得意先コード]='" & [得意先コード] & "'")
または
=DLookup("[得意先名]", "[得意先]", _
"[得意先コード]='" & Forms![受注]![得意先コード] & "'")
この抽出条件が評価されるとき、最初に個々の部分が評価され、その結果が追加または連結されます。その後で、全体の値が求められます。 [受注] フォームの [得意先コード] ボックスで現在選択されている値が "笹の葉食料品店" の場合、このコンボ ボックスに連結した列が得意先コードとして "0033" を返します。元の抽出条件の "[得意先コード] = '" & [得意先コード] & "'" "[得意先コード] = '" & "0033" & "'" "[得意先コード] = 0033" 日付抽出条件を指定する場合抽出条件フィールドが日付や時刻の値の場合、日付や時刻の値をシャープ記号 (#) で囲みます。指定した日付が誕生日の社員を検索するには、たとえば、次の抽出条件を使用します。
=DLookup("[氏名]", "社員", "[誕生日] = #68-12-08#")
抽出条件に複数フィールドを指定する場合抽出条件式には、任意の有効な SQL WHERE 句 (キーワード WHERE は除きます) を指定できます。つまり、複数のフィールドを使用して、DLookup() 関数の抽出条件を指定できるということです。たとえば、社員コードが 204 (数値) の社員 "川村 匡" が販売した受注のうち、得意先コードが 0005 (オートナンバー) である得意先 "居酒屋ななべえ" に対応するものを検索するには、次の DLookup() ステートメントを使用します。
=DLookup("[受注コード]", "受注", _
"[得意先コード] = '0005' And [社員コード] = 204")
上記の例では、ハードコードされた (特定の) "得意先コード" と "社員コード" の値が使用されています。抽出条件で特定の値の代わりに変数を使用するには、Visual Basic for Applications (VBA) を使用して、複数の文字列式を連結することができます。次の Visual Basic の例は、この方法を示したものです。 抽出条件は 4 つの部分から構成されています。それぞれの部分が個別に評価された後、各部分の結果が連結され、全体が評価されます。元の抽出条件の "[得意先コード] = '" & CustID & "' And [社員コード] = " & EmpID "[得意先コード] = '" & "0005" & "' And [社員コード] = " & 204 "[得意先コード] = '0005' And [社員コード] = 204"
=DLookup("[氏名]", "社員", _
"Month([誕生日]) = " & Month(Date) & " And Day([誕生日]) _
= " & Day(Date))
"Month([誕生日]) = " & Month(Date) & " And Day([誕生日]) = " _
& Day(Date)
"Month([誕生日]) = " & 12 & " And Day([誕生日]) = " & 2 "Month([誕生日]) = 12 And Day([誕生日]) = 2" DLookup() 式のトラブルシューティングとデバッグに関するヒント式のトラブルシューティングを行うには、式を小さな部分に分解し、各部分を個別に [イミディエイト] ウィンドウ内でテストして、それらが正常に動作するかどうかを確認します。個々の小さい構成要素が正しく動作すれば、それらを 1 つずつ、最終的な式が正しく動作するまで元に戻していくことができます。[イミディエイト] ウィンドウを使用すると、Visual Basic のモジュールをデバッグする際に便利です。[イミディエイト] ウィンドウを使用して、フォームやマクロで使用されている式を単独でテストおよび評価します。[イミディエイト] ウィンドウに式を設定し、それらを実行すると、結果が即座に表示されます。 次の例は、[イミディエイト] ウィンドウでテストできるように、DLookup() の式を小さな要素に分解する方法を示したものです。次のステートメントで問題が発生したとします。
=DLookup("[受注コード]", "受注", _
"[得意先コード] = '" & Forms![MyForm]![得意先コード] _
& "' And [社員コード] = " & Forms![MyForm]![社員コード])
この式のトラブルシューティングを行うには、次の手順を実行します。
関連情報
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。" | サポート情報 その他のサポートサイトコミュニティ技術サポート窓口サポート技術情報の翻訳
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email
先頭へ戻る
