В 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)) Просмотров: 1645
Ваш коментарий будет первым | | |