hiroton
2020/09/15 (火) 14:36:13
49c70@f966d
1つのテキストボックスで、
「、」区切りで(or検索)、「。」区切りで(and検索)
のように、2つの条件を切り替えるような事は
可能でしょうか?
テキストの中に「、」「。」が含まれているかどうかチェックすれば条件分岐はできます
Dim matchOr as boolean
Dim matchAnd as boolean
matchOr = InStr("、", Me!txtWord) > 0
matchAnd = InStr("。", Me!txtWord) > 0
If matchOr And matchAnd Then
'「、」「。」両方含むとき'
ElseIf matchOr And Not matchAnd Then
'「、」だけ両方含むとき'
ElseIf Not matchOr AND matchAnd Then
'「。」だけ両方含むとき'
Else
'「、」「。」どちらも含まないとき'
End If
条件指定3で実現するには
どのようなコードがありますでしょうか?
BuildCriteriaを2回重ねることはできないので、どちらかの条件部分を自前で実装ですね。ただ、配列にして処理してしまえば出来上がった条件をつなげるだけなのであっさりできます
Const OrSeparator = "、"
Const AndSeparator = "。"
Dim filterWords
Dim n As Long
If Me!txtWord3 <> "" Then
filterWords = Split(Me!txtWord3, OrSeparator)
For n = 0 To UBound(filterWords)
filterWords(n) = BuildCriteria("[職名]", dbText, _
"" & Replace(StrConv(filterWords(n), vbWide), AndSeparator, " AND
") & "")
Next
strFilter = strFilter & " AND " & Join(filterWords, " OR ")
End If
通報 ...
部分一致が考慮されていないですね。
あと、AND と OR の演算優先順位を考慮する必要もあります。
hiroton 様
迅速な回答いただき誠にありがとうございます。
hatena 様が教え得て頂いた>レス4で実装できました。
BuildCriteriaを2回重ねる事は出来ないのですね。
配列にして処理すること、加えて勉強させて頂きます。
BuildCriteriaは引数に決まった書式の文字列を要求するので1度通すと書式が不適切になってしまいます
あとは、例えば、「チーフ、、リーダー」のような誤入力(「、」が2回連続している)なんかも決まった書式を満たせずエラーになるので注意が必要ですね
文字列を区切り文字でsplitして配列に~な処理は今回はあまり適していない(hatenaさんの回答のほうが適切)なので、そういう関数もあるなぁくらいで大丈夫です