フォーム画面に、日付・A・B・C・D・Eの計6個のフィールドがあります。
日付には、yyyy/mm/ddで入力された日付
A~Eには、各フィールドにtext入力された文字
これらのフィールドから、抽出する為に以下の様なテキストボックスを作っています。
・開始(text_box) ~ 終了(text_box) ・・・・任意の日付をyyyy/mm/ddでそれぞれ入力
・キーワード(text_box)・・・・・・・・・・・・・・任意の文字を入力
上記2つを入力し、同フォーム内に設置した抽出ボタンを押す事で、入力された期間内でかつA~E内フィールドに含まれるレコードを同じフォーム内に表示させたいです。(あいまい検索)
現状のVBAでは、期間内でA~Eの全てのフィールドにキーワードを含むレコードしか表示できず、やり方が分かりません。
A~E各フィールドの何れかに、含まれるレコードを抽出したいです。
例えば
日付 A B C D E
2023/1/1 あ い う え お
2023/1/1 か き く け お
2023/1/2 さ し う せ そ
2023/1/3 た ち つ え と
2023/1/4 あ か さ え ご
開始:2023/1/1 ~ 終了:2023/1/3 キーワード:う 抽出ボタンを押す
結果として以下を同フォームに表示
2023/1/1 あ い う え お
2023/1/2 さ し う せ そ
このような抽出は可能でしょうか。
最近始めたばかりで、説明も上手く出来ておりませんが
教えて頂きたいです。よろしくお願いいたします。
ヒントを出しておくと、A・B・C・D・Eの各フィールドの条件をOr演算子で連結すればいいでしょう。
あるいは、A・B・C・D・Eの各フィールド値を&演算子で結合してそれに対してLike演算子であいまい条件を設定すればいいでしょう。
上記のヒントで具体的にコードが分からない場合は、
現状のVBAを提示してください。
大変遅くなり申し訳ございません。
現状のVBAは以下になります。
【UP1】
Private Sub 抽出ボタン_Click()
Dim filter As String
filter = ""
If Me!開始 <> "" And Me!終了 <> "" Then
If Me!開始 > Me!終了 Then
MsgBox "期間指定が不適切です。再入力してください。", vbCritical + vbOKOnly, "期間指定不備"
Exit Sub
End If
End If
If Me!開始 <> "" Then
If Me!開始 <> "" Then
filter = "日付 >= #" & Me!開始 & "# and 日付 <= #" & Me!終了 & "#"
Else
filter = "日付 >= #" & Me!開始 & "#"
End If
ElseIf Me!終了 <> "" Then
filter = "日付 <= #" & Me!終了 & "#"
End If
行の関係上、続きは別途UPします。
【UP1の続き】
If Me!キーワード <> "" Then
If filter = "" Then
filter = "A like '" & Me!キーワード & "'"
Else
filter = filter & " and A like '" & Me!キーワード & "'"
End If
End If
If Me!キーワード <> "" Then
If filter = "" Then
filter = "B like '" & Me!キーワード & "'"
Else
filter = filter & " and B like '" & Me!キーワード & "'"
End If
End If
If Me!C = True Then
If filter = "" Then
filter = "C like '" & Me!キーワード & "'"
Else
filter = filter & " and C like '" & Me!キーワード & "'"
End If
End If
If filter = "" Then
Me.FilterOn = False
Else
Debug.Print filter
Me.filter = filter
Me.FilterOn = True
Me.OrderBy = "対応日 ASC"
Me.OrderByOn = True
End If
End Sub
フィールドをABCの3つにしていますが実際は5つになります。宜しくお願い致します。
下記でどうでしょう。
A, B, Cの各フィールドに対して部分一致(あいまい検索)になってます。
例えば、Aフィールド 「あいう」、キーワード「う」でも一致とみなします。
もし、各フィールドに対して完全一致の条件にしたいなら、キーワードの条件式のコードを下記に修正してください。
フィールドの区切り記号として';'(セミコロン)を使用してますが、フィールド値にセミコロンが含まれる可能性がある場合は、含まれる可能性がない文字にしてください。
本日教えて頂いたコードで上手く出来ました。
ありがとうございました。