- ベストアンサー
複数条件のDLOOKUP文が上手く使用できない
現在、ACCESSVBAを用いての作業を行っているのですが、 判定条件として複数条件をDLOOKUP文を使用すると実行時にエラーとなるなどして、 上手く動作しません。 おかしな点がありましたら指摘していただけますでしょうか。 対象テーブルのフィールドAAA~は全てテキスト型となっております。 Me!txtはフォーム上から取得した値、 aaaaはそこまでの処理に使用した変数、 rsはレコードセットとなっております。 レコードセットはExcelのセルを読み取ったデータが格納されており、 これらの変数はそのまえの処理で正常に取得を確認しています。 If DLookup("AAA", "TBL", _"BBB ='" & Me!txt & "'" And _"CCC = '" & aaaa & "'" And _"CCC = '" & Left(rs(1), 3) & "'") = Null Then よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> If DLookup("AAA", "TBL", _"BBB ='" & Me!txt & "'" And _"CCC = '" & aaaa & "'" And _"CCC = '" & Left(rs(1), 3) & "'") = Null Then 上記は If DLookup("AAA", "TBL", _ "BBB ='" & Me!txt & "'" And _ "CCC = '" & aaaa & "'" And _ "CCC = '" & Left(rs(1), 3) & "'") = Null Then を1行にしちゃったものになりますか? 継続行の _ をそのままに、1行にしてもエラーになるだけです。 条件部分の基本は "BBB='★1' And CCC='★2' And CCC='★3'" となると思います。 が、提示あったものでは And が文字列内に含まれていませんね。 ★1 ~ ★3 部分を加工していけば良いと思います。 方法としては、提示されたやり方でも良いと思います。 また、以下の様な方法でも・・・・ Dim sWhere As String sWhere = "BBB='★1' And CCC='★2' And CCC='★3'" sWhere = Replace(sWhere, "★1", Me!txt) sWhere = Replace(sWhere, "★2", aaaa) sWhere = Replace(sWhere, "★3", Left(rs(1), 3)) If IsNull(DLookup("AAA", "TBL", sWhere)) Then ※ Null 判別は = では NG なので、IsNull を使用します。 ※ かなりシビアな処理性能を求めるところでないのなら、 後者の方法もありなのかと・・・・ ※ 基本となるものを記述しておくと、 CCC='★2' And CCC='★3' この部分、本当に And で良いんだろうか・・・とか気付きやすい? "BBB='★1' And (CCC='★2' Or CCC='★3')" ??
お礼
ありがとうございます。 = NULLと継続行の _ については、誤って残してしまっておりました。 >And が文字列内に含まれていませんね。 というこちらを意識して記述を修正したところ上手く動かすことが出来ました。