VBA:匹配多个字符串

时间:2016-05-30 14:33:31

标签: vba

我的问题最好被理解为以下示例,我的目标是如果字符串匹配这些类别中定义的任何一个字符串,则将以下字符串分类。例如,

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语句,这将是乏味的。有更好的方法吗?

3 个答案:

答案 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

希望这可以帮助某人。