お世話になります。AccsessVBA学習1ヶ月ほどの者です。
参考サイトなどをみて、検索フォームを作りましたが、
2つのテキストボックスで、
(1)複数のキーワードを全角の「、」区切りで
あいまい(or検索)
例:氏名)田中、鈴木 →氏名で田中 または 鈴木が含まれるレコードが検索される
(2)複数のキーワードを全角の「。」区切りで
完全一致(and検索)
例:所属)本社。営業 →所属で本社 と 営業が含まれるレコードが検索される
ができましたが、下記の点が可能かどうか質問します。
お知恵をお借りできればありがたいです。
<質問>
1つのテキストボックスで、
「、」区切りで(or検索)、「。」区切りで(and検索)
のように、2つの条件を切り替えるような事は
可能でしょうか?
条件指定3で実現するには
どのようなコードがありますでしょうか?
入力テキスト:Me.txtWord3
検索対象フィールド:職名
例1:職名)チーフ、リーダー →職名でチーフ または リーダー が含まれるレコードが検索される
例2:職名)チーフ。リーダー →職名でチーフ と リーダー が含まれるレコードが検索される
>>>>>>>>>>>>>>>>>>>>>>
'サンプルコード
Private Sub btnSubmit_Click()
Dim strFilter As String
'条件指定1_複数キーワード入力_読点[、]区切りであいまいor検索
If Not IsNull(Me.txtWord) Then
strFilter = strFilter & " AND " & BuildCriteria("[氏名]&[フリガナ]", dbText,
"" & Replace(StrConv(Me.txtWord, vbWide), "、", " OR ") & "")
End If
'条件指定2_複数キーワード入力_読点[。]区切りで 完全一致(and検索)
If Not IsNull(Me.txtWord2) Then
strFilter = strFilter & " AND " & BuildCriteria("[所属]&[所属_cd]", dbText, _
"" & Replace(StrConv(Me.txtWord2, vbWide), "。", " AND ") & "")
End If
'条件指定3_複数キーワード入力_読点[、]区切りであいまいor検索 読点[。]区切りで 完全一致(and検索)
If Not IsNull(Me.txtWord3) Then
strFilter = strFilter & " AND " & BuildCriteria("職名", dbText,
"" & Replace(StrConv(Me.txtWord3, vbWide), "、", " OR ") & "")
End If
'先頭の" AND "を取り除く
strFilter = Mid(strFilter, 6)
'フィルター条件の設定
Me.Filter = strFilter
'フィルターの実行 (もしくは解除)
Me.FilterOn = (strFilter <> "")
'フィルター条件空の場合のメッセージ
If Me.FilterOn = False Then
MsgBox "検索条件を入れてください"
End If
'フィルター条件空の場合のメッセージ
If (Me.Recordset.RecordCount = 0) Then
MsgBox "該当データはありません"
Cancel = True
End If
End Sub
テキストの中に「、」「。」が含まれているかどうかチェックすれば条件分岐はできます
BuildCriteriaを2回重ねることはできないので、どちらかの条件部分を自前で実装ですね。ただ、配列にして処理してしまえば出来上がった条件をつなげるだけなのであっさりできます
部分一致が考慮されていないですね。
あと、AND と OR の演算優先順位を考慮する必要もあります。
hiroton 様
迅速な回答いただき誠にありがとうございます。
hatena 様が教え得て頂いた>レス4で実装できました。
BuildCriteriaを2回重ねる事は出来ないのですね。
配列にして処理すること、加えて勉強させて頂きます。
BuildCriteriaは引数に決まった書式の文字列を要求するので1度通すと書式が不適切になってしまいます
あとは、例えば、「チーフ、、リーダー」のような誤入力(「、」が2回連続している)なんかも決まった書式を満たせずエラーになるので注意が必要ですね
文字列を区切り文字でsplitして配列に~な処理は今回はあまり適していない(hatenaさんの回答のほうが適切)なので、そういう関数もあるなぁくらいで大丈夫です
可能ですが、下記の点について補足をお願いします。
'条件指定3_複数キーワード入力_読点[、]区切りであいまいor検索 読点[。]区切りで 完全一致(and検索)
の部分ですが、
読点[、]区切りであいまいor検索
は、あいまい(=部分一致) で or条件、つまり、複数のキーワードのうち一つでも含まれれば抽出する、
ということでよね。
読点[。]区切りで 完全一致(and検索)
は(読点は句点の間違いとして)、完全一致でand条件ということはありえないので、部分一致 で and条件ということですよね。
つまり、複数のキーワードをすべて含むデータを抽出する。
あと、読点 と 句点 が混在する可能性はありますか。
「チーフ。リーダー、ボス」とか。
いちおう、たたき台として、
読点(、)、句点(。)混在は可能ですが、And演算子がOr演算子より演算順位が高いので、
ユーザーがそれを理解していないと期待の結果にならない場合があるので注意が必要。
上記の strSubFilter には、下記のような条件式が格納されます。
hatena 様
迅速な回答いただき誠にありがとうございます。
句点、部分一致の文中の間違いご指摘ありがとうございます。
>あと、読点 と 句点 が混在する可能性はありますか。
>「チーフ。リーダー、ボス」とか。
読点 と 句点 が混在する可能性はありません。
どちらかでしか検索出来ないようにしたいとおもっています。
たたき台を使用させて頂きましたところ、
思っていたように検索が出来ました。
本当にありがとうございます。
教えて頂いたこと、勉強させて頂きます。