2016-05-30 4 views
3

Моим вопросом лучше всего будет считаться следующий пример. Моя цель - классифицировать следующую строку в категорию, если строка соответствует любой из строк, определенных в этих категориях. Например,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 заявления, что было бы утомительно. Есть лучший способ сделать это ?

ответ

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 
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 ... нет Match> 0 индекса слова

Смежные вопросы