回答編集履歴

3

追記

2018/03/20 09:15

投稿

ttyp03
ttyp03

スコア16998

test CHANGED
@@ -103,3 +103,53 @@
103
103
  End Function
104
104
 
105
105
  ```
106
+
107
+ --
108
+
109
+ ORとANDの混在バージョン。
110
+
111
+ ```VBA
112
+
113
+ Private Sub SearchButton_Click()
114
+
115
+ ~省略~
116
+
117
+
118
+
119
+ Dim filters() As String
120
+
121
+ ' テキストボックス1が入力されているとき
122
+
123
+ With Me.TextBox1
124
+
125
+ If .Value <> "" Then
126
+
127
+ Call AddFilter(filters, "(姓 like '%" & .Value & "%' OR セイ like '%" & .Value & "%')")
128
+
129
+ End If
130
+
131
+ End With
132
+
133
+ ' テキストボックス2が入力されているとき
134
+
135
+ With Me.TextBox2
136
+
137
+ If .Value <> "" Then
138
+
139
+ Call AddFilter(filters, "(電話番号1 like '%" & .Value & "%' OR 電話番号2 like '%" & .Value & "%')")
140
+
141
+ End If
142
+
143
+ End With
144
+
145
+ '抽出条件を設定してフィルターをかける
146
+
147
+ adoRs.Filter = Join(filters, " AND ")
148
+
149
+
150
+
151
+ ~省略~
152
+
153
+ End Sub
154
+
155
+ ```

2

追記

2018/03/20 09:15

投稿

ttyp03
ttyp03

スコア16998

test CHANGED
@@ -33,3 +33,73 @@
33
33
 
34
34
 
35
35
  ちなみに空のときに`_`で置き換えてしまうと、`%_%`という条件になってしまい、アンダースコアを含むものが抽出されてしまいますので、間違った処理です。
36
+
37
+
38
+
39
+ --
40
+
41
+ 少しだけかっこよく書き直してみました。
42
+
43
+ 但し、条件がOR固定なのでAND条件があったりすると改造が必要です。
44
+
45
+ 単純にOR条件を追加していく分には楽ではないかと思います。
46
+
47
+ ```VBA
48
+
49
+ Private Sub SearchButton_Click()
50
+
51
+ ~省略~
52
+
53
+
54
+
55
+ Dim filters() As String
56
+
57
+ ' テキストボックス1が入力されているとき
58
+
59
+ If Me.TextBox1.Value <> "" Then
60
+
61
+ Call AddFilter(filters, "姓 like '%" & Me.TextBox1.Value & "%'")
62
+
63
+ Call AddFilter(filters, "セイ like '%" & Me.TextBox1.Value & "%'")
64
+
65
+ End If
66
+
67
+ ' テキストボックス2が入力されているとき
68
+
69
+ If Me.TextBox2.Value <> "" Then
70
+
71
+ Call AddFilter(filters, "電話番号1 like '%" & Me.TextBox2.Value & "%'")
72
+
73
+ Call AddFilter(filters, "電話番号2 like '%" & Me.TextBox2.Value & "%'")
74
+
75
+ End If
76
+
77
+ '抽出条件を設定してフィルターをかける
78
+
79
+ adoRs.Filter = Join(filters, " OR ")
80
+
81
+
82
+
83
+ ~省略~
84
+
85
+ End Sub
86
+
87
+
88
+
89
+ Sub AddFilter(ByRef filters() As String, joken As String)
90
+
91
+ If Not Not filters Then
92
+
93
+ ReDim Preserve filters(UBound(filters) + 1)
94
+
95
+ Else
96
+
97
+ ReDim filters(0)
98
+
99
+ End If
100
+
101
+ filters(UBound(filters)) = joken
102
+
103
+ End Function
104
+
105
+ ```

1

ちなみに

2018/03/20 05:40

投稿

ttyp03
ttyp03

スコア16998

test CHANGED
@@ -29,3 +29,7 @@
29
29
  adoRs.Filter = filter
30
30
 
31
31
  ```
32
+
33
+
34
+
35
+ ちなみに空のときに`_`で置き換えてしまうと、`%_%`という条件になってしまい、アンダースコアを含むものが抽出されてしまいますので、間違った処理です。