VBA Tipp: Zeichenanzahl ermitteln

Aus DBWiki
Wechseln zu: Navigation, Suche

Aufgabenstellung

Ich möchte herausfinden, wie oft ein bestimmtes Zeichen oder eine bestimmte Zeichenfolge in einer anderen Zeichenfolge vorkommt. Es wird nicht zwischen Groß- und Kleinschreibung unterschieden.

Lösung 1

Public Function AnzahlZeichenfolge(ByVal Text As String, _
                                   ByVal Suchtext As String) As Long
 
 'Quelle: http://www.dbwiki.net/
 
 AnzahlZeichenfolge = UBound(Split(Text, Suchtext))
 
End Function

Aufruf 1

 Dim strText As String
 strText = "Ein Schwein ist nicht gerne allein."
 
 MsgBox AnzahlZeichenfolge(strText, "ein")    'ergibt 3
 MsgBox AnzahlZeichenfolge(strText, "e")      'ergibt 5

Lösung 2

Optional kann eine Startposition vorgegeben werden, an der die Suche in der Zeichenfolge beginnen soll.

Public Function AnzahlZeichenfolge(ByVal Text As String, _
                                   ByVal Suchtext As String, _
                                   Optional ByVal Startposition As Long = 1 _
                                   ) As Long
 
 'Quelle: http://www.dbwiki.net/
 
 Dim anz As Long
 Dim T As String
 Dim S As Long
 
 anz = 0
 T = Text
 S = Startposition
 
 If S < 1 Then
   S = 1
 End If
 
 Do While InStr(S, T, Suchtext)
   anz = anz + 1
   T = Mid(T, InStr(S, T, Suchtext) + 1)
   S = 1
 Loop
 
 AnzahlZeichenfolge = anz
 
End Function

Lösung 3

Optional kann eine Startposition vorgegeben werden, an der die Suche in der Zeichenfolge beginnen soll.

Public Function AnzahlZeichenfolge(ByVal Text As String, _
                                   ByVal Suchtext As String, _
                                   Optional ByVal Startposition As Long) As Long
 
 'Quelle: http://www.dbwiki.net/
 
 Dim i As Long
 Dim j As Long
 
 If Startposition < 1 Then
   Startposition = 1
 End If
 
 For i = Startposition To Len(Text)
   If Mid(Text, i, Len(Suchtext)) = Suchtext Then
     j = j + 1
   End If
 Next i
 
 AnzahlZeichenfolge = j
 
End Function

Aufruf 2 und 3

 Dim strText As String
 strText = "Ein Schwein ist nicht gerne allein."
 
 MsgBox AnzahlZeichenfolge(strText, "ein")    'ergibt 3
 MsgBox AnzahlZeichenfolge(strText, "e")      'ergibt 5
 MsgBox AnzahlZeichenfolge(strText, "ein", 2) 'ergibt 2
 MsgBox AnzahlZeichenfolge(strText, "w", 9)   'ergibt 0