Я использую Excel VBA для проверки точности строки. Мне нужно убедиться, что переменная подстрока не дублируется. Я использовал громоздкий метод ElseIf, но в нем отсутствуют случаи, когда использовалось более одной подстроки. Первая подстрока прошла, но она не зацикливается, чтобы проверить следующую подстроку.
Dim chkstring As String, phrase As String
If InStr(chkstring, "BAG") > 0 Then
phrase = "BAG"
ElseIf InStr(chkstring, "NOTE") > 0 Then
phrase = "NOTE"
ElseIf InStr(chkstring, "MEMO") > 0 Then
phrase = "MEMO"
Else
phrase = ""
End If
If phrase <> "" Then
OccurCount = findOccurancesCount(chkstring, phrase)
If OccurCount > 1 Then
'highlight cell
End If
End If
Затем я использую
Function findOccurancesCount(chkstring, phrase)
OccurCount = 0
y = 1
Do
foundPosition = InStr(y, chkstring, phrase) 'searching from i position
If foundPosition > 0 Then 'substring is found at foundPosition index
OccurCount = OccurCount + 1 'count this occurance
y = foundPosition + 1 'searching from x+1 on the next cycle
End If
Loop While foundPosition <> 0
findOccurancesCount = OccurCount
End Function
Это нормально, если chkstring = "BAG BAG"Но если есть более одной фразы, он не вернется, чтобы искать других. Например: «BAG NOTE NOTE»
«BAG» проходит проверку, но не возвращается к поиску «NOTE».
Мне интересно, есть ли более эффективный способ объединить все возможные фразы, а затем проверить, нет ли среди них в chkstring более одной? Спасибо!