MyTetra Share
Делитесь знаниями!
Количество вхождений подстроки в строку (VBA)
03.08.2018
00:42
Раздел: VBA

Количество вхождений подстроки в строку (VBA)

(обращений: 1430 с 28.03.2016)

Разделы:  Строки, Полезные функции

 

Описание: Всё ясно из названия

Автор: Дмитрий Сонных (AKA Joss)

Добавил на сайт: Профиль пользователяJoss 28.03.2016

В 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



[Back]


Текущий рейтинг:
0 из 5 (проголосовало:0).
Здравствуйте!
Для участия в рейтинге необходимо залогиниться на сайт.
Это сделано для того, чтобы более точно производить оценку статей (чтобы одному и тому же человеку было труднее голосовать несколько раз, портя тем самым статистику.
Эта процедура очень быстрая и, надеюсь, Вас не затруднит :).
Все мысли по поводу работы сайта всегда можно высказать на форуме!
Вход на сайт

Обсуждение статьи:   
Число вхождений подстроки (символа) в текст Профиль пользователяJoss   
Вот ещё один пример из интернета

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


26.03.2016 21:30

Взято с сайта http://www.programmersforum.ru Профиль пользователяJoss   
Решить данную задачу можно кучей способов... Вот так

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))



26.03.2016 21:55

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