質問編集履歴

3

原因がわかりました。

2018/03/22 03:05

投稿

miniryu
miniryu

スコア15

test CHANGED
File without changes
test CHANGED
@@ -293,3 +293,9 @@
293
293
 
294
294
 
295
295
  ORの場合は動くので、最初に思いついた原因の「Nullとうまく参照できていない」というのとは別に原因がありそうだと思い直しています。
296
+
297
+
298
+
299
+ ### 追記2-2
300
+
301
+ [公式の説明](https://msdn.microsoft.com/ja-jp/library/cc426691.aspx)にANDで結合できないことが書かれてありました。結合の仕方を変える必要があるそうです。

2

サンプルコードを試してみて

2018/03/22 03:05

投稿

miniryu
miniryu

スコア15

test CHANGED
File without changes
test CHANGED
@@ -279,3 +279,17 @@
279
279
 
280
280
 
281
281
  OR はよくて AND はだめな理由が分かりません。。
282
+
283
+
284
+
285
+ ### 追記2
286
+
287
+ サンプルコードありがとうございます。示していただいたサンプルコードを試してみたのですが、やはり AND のところで、同様のエラーが発生してしまいます。同じように OR だと動きます。
288
+
289
+
290
+
291
+ いろいろ試すことで、vbaに少しずつ慣れてきているのは自分でも嬉しいのですが、それは置いといて、なぜ意図どおりに動いてくれないのか…
292
+
293
+
294
+
295
+ ORの場合は動くので、最初に思いついた原因の「Nullとうまく参照できていない」というのとは別に原因がありそうだと思い直しています。

1

別の抽出条件を追記

2018/03/22 02:48

投稿

miniryu
miniryu

スコア15

test CHANGED
File without changes
test CHANGED
@@ -201,3 +201,81 @@
201
201
 
202
202
 
203
203
  ```
204
+
205
+
206
+
207
+ ### 追記
208
+
209
+ たびたび申し訳ありません。自分がやりたい事というのが自分でもよく把握していなかったみたいです…。今回、皆さま方よりご回答をいただいて、ようやくそれを明確にできてきました。
210
+
211
+
212
+
213
+ それで、いただいたご回答を参考にしながら、自分のやりたい抽出条件を書いてみました。
214
+
215
+ ①それぞれのテキストボックスに別々の抽出条件(SearchFilter1とSearchFilter2)を設定する
216
+
217
+ ②その上でテキストボックスへの記入がされているかどうかで条件分岐して
218
+
219
+ ③最初に設定した抽出条件を使用して、最終的な抽出条件(adoRs.filter)を決定する。
220
+
221
+
222
+
223
+ ```vba
224
+
225
+ Dim SearchFilter1 As String, SearchFilter2 As String
226
+
227
+
228
+
229
+ 'それぞれのテキストボックスに抽出条件を設定
230
+
231
+ SearchFilter1 = ("姓 like '%" & Me.TextBox1.Value & "%'" & " OR セイ like '%" & Me.TextBox1.Value & "%'")
232
+
233
+ SearchFilter2 = ("電話番号1 like '%" & Me.TextBox2.Value & "%'" & " OR 電話番号2 like '%" & Me.TextBox2.Value & "%'")
234
+
235
+
236
+
237
+ 'それぞれのテキストボックスへの入力の有無により条件分岐
238
+
239
+ If Me.TextBox1.Value = "" And Me.TextBox2.Value = "" Then 'どちらも未入力の場合
240
+
241
+ Call CutDB
242
+
243
+ MsgBox "テキストボックスに条件を入力してください。"
244
+
245
+ Exit Sub
246
+
247
+ ElseIf Me.TextBox1.Value <> "" And Me.TextBox2.Value <> "" Then 'どちらにも入力されている場合
248
+
249
+ adoRs.filter = SearchFilter1 & " AND " & SearchFilter2
250
+
251
+ ElseIf Me.TextBox1.Value <> "" And Me.TextBox2.Value = "" Then 'TextBox1のみ入力されている場合
252
+
253
+ adoRs.filter = SearchFilter1
254
+
255
+ ElseIf Me.TextBox1.Value = "" And Me.TextBox2.Value <> "" Then 'TextBox2のみ入力されている場合
256
+
257
+ adoRs.filter = SearchFilter2
258
+
259
+ End If
260
+
261
+
262
+
263
+ ```
264
+
265
+
266
+
267
+ ただ、これだと ``adoRs.filter = SearchFilter1 & " AND " & SearchFilter2`` でエラーが出てしまいます。
268
+
269
+ ``AND`` を ``OR`` にすると動くのですが、意図する仕様は AND です。
270
+
271
+
272
+
273
+ **エラーメッセージ**
274
+
275
+ 実行時エラー'301':
276
+
277
+ 引数が間違った型、許容範囲外、または競合しています。
278
+
279
+
280
+
281
+ OR はよくて AND はだめな理由が分かりません。。