it-swarm.com.de

So finden Sie die Anzahl der Vorkommen von Slash aus einer Zeichenfolge

Wie kann ich die Anzahl der Vorkommen des Schrägstrichs (/) in einem String mithilfe eines Excel-VBA-Makros ermitteln?

21
Code Hungry

Verwenden Sie die folgende Funktion wie in count = CountChrInString(yourString, "/").

'''
''' Returns the count of the specified character in the specified string.
'''
Public Function CountChrInString(Expression As String, Character As String) As Long
'
' ? CountChrInString("a/b/c", "/")
'  2
' ? CountChrInString("a/b/c", "\")
'  0
' ? CountChrInString("//////", "/")
'  6
' ? CountChrInString(" a / b / c ", "/")
'  2
' ? CountChrInString("a/b/c", " / ")
'  0
'
    Dim iResult As Long
    Dim sParts() As String

    sParts = Split(Expression, Character)

    iResult = UBound(sParts, 1)

    If (iResult = -1) Then
    iResult = 0
    End If

    CountChrInString = iResult

End Function
15
assylias

Alte Frage, aber ich dachte, ich würde die Qualität der Antwort durch eine Antwort verbessern, die ich in einem Excel-Forum gefunden habe. Anscheinend kann der Zähler auch mit gefunden werden.

    count =Len(string)-Len(Replace(string,"/",""))

Die volle Antwort für die Antwort geht an den ursprünglichen Autor unter: http://www.ozgrid.com/forum/showthread.php?t=45651

32
Function CountOfChar(str as string, character as string) as integer
      CountOfChar = UBound(Split(str, character))
End Function
12
maracuja

Übrigens, wenn Sie Leistung erwarten, ist Folgendes um 20% schneller als die Verwendung von Split oder Replace, um die Anzahl zu ermitteln:

Private Function GetCountOfChar( _
  ByRef ar_sText As String, _
  ByVal a_sChar As String _
) As Integer
  Dim l_iIndex As Integer
  Dim l_iMax As Integer
  Dim l_iLen As Integer

  GetCountOfChar = 0
  l_iMax = Len(ar_sText)
  l_iLen = Len(a_sChar)
  For l_iIndex = 1 To l_iMax
    If (Mid(ar_sText, l_iIndex, l_iLen) = a_sChar) Then 'found occurrence
      GetCountOfChar = GetCountOfChar + 1
      If (l_iLen > 1) Then l_iIndex = l_iIndex + (l_iLen - 1) 'if matching more than 1 char, need to move more than one char ahead to continue searching
    End If
  Next l_iIndex
End Function
1
user9338905

Ich mag die Antwort von Santhosh Divakar. Deshalb habe ich sie erweitert, um der Möglichkeit Rechnung zu tragen, dass Sie nach mehr als nur einem einzelnen Zeichen suchen möchten, indem Sie das Ergebnis durch die Länge der Suchzeichen wie folgt teilen:

Function Num_Characters_In_String(Input_String As String, Search_Character As String) As Integer
'Returns the number of times a specified character appears in an input string by replacing them with an empty string
'   and comparing the two string lengths. The final result is then divided by the length of the Search_Character to
'   provide for multiple Search Characters.

    Num_Characters_In_String = (Len(Input_String) - Len(Replace(Input_String, Search_Character, ""))) / Len(Search_Character)

End Function

Als Beispiel das Ergebnis von 

Num_Characters_In_String("One/Two/Three/Four//", "//")

gibt Ihnen 1, da am Satzende nur ein doppelter Schrägstrich steht.

1
SandPiper

Hier ist eine einzeilige Version zur Verwendung, wenn Sie keine separate Funktion aufrufen möchten. Es ist nur eine komprimierte Version des CountChrInString und einiger anderer oben.

? UBound(Split("abcabcabc", "cd"), 1)

Dies gibt 0 zurück. Wenn Sie "cd" in "ab" ändern, wird 3 zurückgegeben. Dies funktioniert auch mit Variablen. Beachten Sie, dass, wenn die zu überprüfende Zeichenfolge (abcabc ...) leer ist, sie -1 zurückgibt.

0
RIck_R

Dies ist eine einfache Lösung für VBA-Excel-Makros.

Function CharCount(str As String, chr As String) As Integer
     CharCount = Len(str) - Len(Replace(str, chr, ""))
End Function
0
Shawn Smith