我的问题最好被理解为以下示例,我的目标是如果字符串匹配这些类别中定义的任何一个字符串,则将以下字符串分类。例如,
dim test_str as string
test_str = "tomato"
如果测试字符串tomato
与关键字(1)potato
,(2)tomato
和(3)spaghetti
中的任何一个匹配,那么番茄将被分类作为食物。
我现在有一种非常低效的方法,包括使用多个strcomp
,即
if(strcomp(test_str, "potato", vbtextcompare) = 0 or _
strcomp(test_str, "tomato", vbtextcompare) =0 or _
strcomp(test_str, "spaghetti", vbtextcompare)=0 ) then
'label test str as "food"
但是,如果我在“食物”中定义了10个关键词,那么我需要10个strcomp
语句,这将是乏味的。有更好的方法吗?
答案 0 :(得分:2)
我只是将所有组合存储在一个字符串中,并检查该值是否存在InStr
:
Const food = "|potato|tomato|spaghetti|"
Dim test_str As String
test_str = "tomato"
If InStr(1, food, "|" & test_str & "|", vbTextCompare) Then
Debug.Print "food"
Else
Debug.Print "not food"
End If
答案 1 :(得分:0)
编写一个可以帮助你的功能
Function ArrayWordNotInText(textValue, arrayKeyword)
Dim i
ArrayWordNotInText = -1
For i = LBound(arrayKeyword) To UBound(arrayKeyword)
If Not StrComp(textValue, arrayKeyword(i), vbTextCompare) Then ArrayWordNotInText = i
Next i
End Function
如果返回值= -1 ...没有匹配,则> 0是单词的索引
答案 2 :(得分:0)
这是我第一次发布;请原谅我的格式。使用VBA的时间不长,但可以将其组合在一起。
Sub vinden4()
Dim EXCEPT() As String, a As Integer
EM = "no.replynoreply@ziggo.nl"
Exceptions = "no-Reply,noreply,nO.reply,"
EXCEPT = Split(Exceptions, ",")
For i = LBound(EXCEPT) To UBound(EXCEPT)
NOREPLY = InStr(1, EM, EXCEPT(i), vbTextCompare)
If NOREPLY > 0 Then
'CbEM.Value = True '~food~
EM = InputBox("NOREPLY E-MAILADRES", "Geef E-mailadres aan", EM)
'else
'CbEM.Value = False ~not food~
End If
Next i
MsgBox EM
End Sub
希望这可以帮助某人。