web-dev-qa-db-fra.com

Comment trouver le nombre d'occurrences de Slash à partir d'une chaîne

Comment trouver le nombre d'occurrences du caractère barre oblique (/) dans une chaîne à l'aide d'une macro VBA Excel?

21
Code Hungry

Utilisez la fonction ci-dessous, comme dans 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

Vieille question, mais je pensais que j'ajouterais à la qualité de la réponse par une réponse trouvée sur un forum Excel. Apparemment, le nombre peut également être trouvé en utilisant.

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

La réponse complète va à l'auteur original à l'adresse: http://www.ozgrid.com/forum/showthread.php?t=45651

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

BTW, si vous êtes dans la performance, ce qui suit est 20% plus rapide que d’utiliser split ou replace pour déterminer le nombre:

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

J'aime la réponse de Santhosh Divakar, je l'ai donc développée pour tenir compte de la possibilité de vérifier davantage qu'un seul caractère en divisant le résultat par la longueur des caractères recherchés, comme ceci:

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

Par exemple, le résultat de 

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

vous donne 1, car il n'y a qu'une double barre oblique à la fin de la phrase.

1
SandPiper

C'est une solution facile pour les macros Excel VBA.

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