MyTetra Share
Делитесь знаниями!
Количество вхождений подстроки в строку (VBA)
Время создания: 16.03.2019 23:43
Раздел: Разные закладки - VBA
Запись: xintrea/mytetra_db_adgaver_new/master/base/1533246145dr4879zmz9/text.html на raw.githubusercontent.com

В VBA нет стандартной функции определяющей количество вхождений подстроки в строку. По этому каждый извращается как может. Вот одно из решений когда-то найденное на просторах интернета



k = len(stroka) - len(replace(stroka, simvol, ""))



С таким же успехом можно подсчитать количество вхождений подстроки:



k = (len(stroka) - len(replace(stroka, podstroka, "")))/len(podstroka)



Ну и оформим всё это в функцию



Public Function fnOccurrenceSubstring(Stroka As String, Podstroka As String) As Integer

If Len(Stroka) = 0 Then

fnOccurrenceSubstring = -1

Exit Function

End If

If Len(bPodstroka) = 0 Then

fnOccurrenceSubstring = -1

Exit Function

End If


fnOccurrenceSubstring = (Len(Stroka) - Len(Replace(Stroka, Podstroka, ""))) / Len(Podstroka)


End Function


Вот ещё один пример из интернета



Function КолСимв(строка As String, символ As String) As Integer


Dim TestPos As Integer


КолСимв = 0

TestPos = 1


Do While InStr(TestPos, строка, символ) > 0


КолСимв = КолСимв + 1

TestPos = InStr(TestPos, строка, символ) + Len(символ)


Loop


End Function

Решить данную задачу можно кучей способов... Вот так


Dim s1 As String, s2 As String

Dim Cnt As Integer

s1 = "es"

s2 = "vest is best forest"

Cnt = 0

While InStr(1, s2, s1) > 0

Cnt = Cnt + 1

s2 = Mid(s2, InStr(1, s2, s1) + Len(s1))

Wend

MsgBox "Count = " & Str(Cnt)


или так


Dim s1 As String, s2 As String

Dim PrevPos As Integer, Cnt As Integer

s1 = "es"

s2 = "vest is best forest"

PrevPos = 1

Cnt = 0

While InStr(PrevPos, s2, s1) > 0

Cnt = Cnt + 1

PrevPos = InStr(PrevPos, s2, s1) + 1

Wend

MsgBox "Count = " & Str(Cnt)


и вот так:


Dim s1 As String, s2 As String

Dim i As Integer, Cnt As Integer

s1 = "es"

s2 = "vest is best forest"

i = 1

Cnt = 0

For i = 1 To Len(s2) - Len(s1) + 1

If Mid(s2, i, Len(s1)) = s1 Then Cnt = Cnt + 1

Next i

MsgBox "Count = " & Str(Cnt)



Ещё один вариант - правда, красиво!



Dim s1 As String, s2 As String

s1 = "es"

s2 = "vest is best forest"

MsgBox "Count = " & UBound(Split(s2, s1))



Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования