VBA Tipp: Zeichenanzahl ermitteln

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

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(Text As String, Suchtext As String) As Long
 
   'Quelle: www.dbwiki.net oder www.dbwiki.de
 
   AnzahlZeichenfolge = UBound(Split(Text, Suchtext))
 
End Function

Aufruf

   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, an der die Suche in der Zeichenfolge beginnen soll, sowie eine Vergleichsmethode vorgegeben werden.

Public Function AnzahlZeichenfolge(Text As String, _
                                   SuchText As String, _
                                   Optional ByVal Startposition As Long = 1, _
                                   Optional Compare As VbCompareMethod = vbTextCompare) As Long
 
   'Quelle: www.dbwiki.net oder www.dbwiki.de
 
   Dim anz        As Long
   Dim pos        As Long
   Dim suchLaenge As Long
 
 
   suchLaenge = Len(SuchText)
   If Len(Text) = 0 Or suchLaenge = 0 Then Exit Function
   If Startposition < 1 Then Startposition = 1
 
   pos = InStr(Startposition, Text, SuchText, Compare)
   Do While pos
      AnzahlZeichenfolge = AnzahlZeichenfolge + 1
      Startposition = pos + suchLaenge
      pos = InStr(Startposition, Text, SuchText, Compare)
   Loop
 
End Function

Lösung 3

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

Public Function AnzahlZeichenfolge(Text As String, Suchtext As String, _
                                   Optional ByVal StartPosition As Long = 1, _
                                   Optional Compare As VbCompareMethod = vbTextCompare) As Long
 
   'Quelle: http://www.dbwiki.net/
 
   Dim i          As Long
   Dim suchLaenge As Long
 
   If StartPosition < 1 Then StartPosition = 1
   suchLaenge = Len(Suchtext)
 
   For i = StartPosition To Len(Text)
      If StrComp(Mid$(Text, i, suchLaenge), Suchtext, Compare) = 0 Then
         AnzahlZeichenfolge = AnzahlZeichenfolge + 1
      End If
   Next
 
End Function
Wiki hinweis.png

Anmerkung: Methode 2 und Methode 3 unterscheiden sich dadurch, dass bei Methode 3 bei einem erfolgreichen Vergleich beim nächsten Zeichen die Suche fortgesetzt wird, während Methode 2 am Ende des gefundenen Suchtexts mit dem nächsten Vergleich beginnt.


Aufruf Lösung 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
   MsgBox AnzahlZeichenfolge("aaa", "aa")       'ergibt: 1 bei Methode 2 und 2 bei Methode 3