- ベストアンサー
AccessのDLookUpの第3引数の値について
AccessのDLookUpの第3引数に「" [テーブル]![フィールド] =" & テーブル!フィールド & "」という値を指定した場合、文章で言うとどうい意味になるのでしょうか? ご存知の方がいらっしゃいましたら、教えて下さい。 よろしくお願い申し上げます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
【要旨】 提示された式のうち、 a)左側の「[テーブル]![フィールド]」は、DLookupの第2引数で 指定したテーブル(またはクエリ)のフィールドを、 b)右側の「テーブル!フィールド」は、DLookup関数を記述した クエリ内で使用しているテーブルのフィールドを、 それぞれ意味します。 (この違いは、「2つで一組の『"』(ダブルクォーテーション)による括り」 の中か外かによって生じます。 【詳細】 > 「" [テーブル]![フィールド] =" & テーブル!フィールド & "」 恐らく、クエリの中で使用されていた式を、この質問のために テーブル名やフィールド名を変えて提示されたのだと思いますが、 一部に写し間違いがあると思われます。 (「"」は通常は2つ一組で、上記の式だとエラーになるはず、と) 式の内容からすると、DLookupは「クエリ(のデザインビュー)」で 使用されているものと推測されますので、以下、その前提で 説明します。 なお、「[ ]」(角括弧)での括りは、テーブル名等にSpaceやカンマ等の 特別な意味を持つ文字が含まれる場合のエラー回避のためで、 実質的な意味は同じですので、以下では「角括弧あり」で統一します。 <正しいと思われる式> "[テーブル]![フィールド]='" & [テーブル]![フィールド] & "'" <元の式との違い> ・「=」の直後に「'」(シングルクォーテーション)を追加 ・末尾の「"」の後に、「'」と「"」を追加 <式の意味> クエリのデザインビューの『フィールド』欄に以下のような式を指定して みます: a)「"[テーブル]![フィールド] & 1"」と、「"」で全体を括る b)「[テーブル]![フィールド] & 1」と、「"」で括らない (末尾の「 & 1」は、Accessによってテーブル名が『テーブル』欄に 自動で移動されてしまうのを防ぐため) その上で、このクエリをデータシートビューにする(または「!」 (実行)ボタンをクリックする)と、 「a」では「[テーブル]![フィールド] & 1」という文字列 「b」では当該フィールドのデータの末尾に「1」が付いた文字列 が、それぞれ表示されます。 つまり、 「"」で括られている場合は、そのままの文字列として、 「"」で括られていない場合は、フィールド(該当フィールドがない 場合はパラメータ)として、 それぞれ扱われる、ということです。 これにより、クエリの1レコード目の当該フィールドが「トマト」だった場合、 同レコードでの第3引数は「"[テーブル]![フィールド]='トマト'"」となり、 2レコード目が「ナス」なら同様に「"[テーブル]![フィールド]='ナス'"」と いったように、レコード毎に異なる条件が指定されることになります。 【番外】 提示された式が他の方から受け取ったもので、現状でエラーになって しまっているためのご質問だった場合は、 "[テーブル]![フィールド]=" & Nz([テーブル]![フィールド]) または "[テーブル]![フィールド]=" & Nz([テーブル]![フィールド], "''") (末尾は「'」2つを、前後各1つの「"」で括ったもの) という式を試してみてください。 <理由> Accessの初期値「Null」は特殊な値のため、その回避策として [フィールド] & "" で「空文字」に置き換えるという手法があります。 ただ、今回の場合は、元の値がNullだと、第3引数は [テーブル]![フィールド]= という、右辺のない式となるため、結局エラーになってしまいます。 これを回避するため、Nz関数を使用して [テーブル]![フィールド]=0 または [テーブル]![フィールド]='' に変換した、ということです。
その他の回答 (3)
- piroin654
- ベストアンサー率75% (692/917)
#1です。いちおう質問の内容に置き換えておきます、 [テーブル]にある最初のレコードは、[フィールド]が1であるために 「" [テーブル]![フィールド] =" & テーブル!フィールド & "」 という引数はつぎのように変換され、 "1 = 1" 抽出条件に一致する最初のレコードとして抽出される。 以上です。
- layy
- ベストアンサー率23% (292/1222)
『DLOOKUP関数を使用するには(応用編)』 というマイクロソフトのサポートオンラインのページ881378で質問事項の説明あります。 『フォーム上のフィールドによるテキスト抽出条件の指定』の欄です。 "[得意先コード]="'&[得意先コード]&"'" 検索してみて下さい。
- piroin654
- ベストアンサー率75% (692/917)
以下の、 http://support.microsoft.com/kb/285866/ja =DLookup("[氏名]", "社員", _ "[社員コード] = Form![社員コード]") =DLookup("[氏名]", "社員", _ "[社員コード] = " & [社員コード]) =DLookup("[氏名]", "社員", _ "[社員コード] = " & Forms![受注]![社員コード]) 上記 3 つの例は、同じ結果を返します。 最初の例では、Form![社員コード] が抽出条件の引用符の中に置かれています。"Form" は、フィールド参照の "社員コード" が現在のフォームのものであることを示します。"Form" を指定しないと、"社員コード" と [社員] テーブルの社員コードそのものとが比較され、[社員] テーブルにある最初のレコードから氏名が返されます (抽出条件を何も指定しなかった場合と同じ結果になります)。なぜなら、[社員] テーブルにある最初のレコードは "社員コード" フィールドが 1 であるため、 "[社員コード] = [社員コード]" という引数は次のように変換され、 "1 = 1" 抽出条件に一致する最初のレコードとして抽出されるためです。 にすべて書いてあります。