簡體   English   中英

計算范圍內的字符az

[英]Count Characters a-z in range

如何通過開發 VBA 計算 Excel 中單元格范圍內的字符 az。 例如,我有一個范圍 (A1:A10) 中的名稱列表,我需要計算所有范圍內的 a、b、c、.... 和 z?

我試過循環到 Chr(64 + i) 和 InStr 但我只得到了哪個字符已使用和未使用,而不是字母總數。

  • 我需要找到每個字符出現的次數,例如 a = 20, B= 12 等等。
  • 結果范圍無關緊要,我們可以把它放在范圍B1:C26

范圍字符計數

編碼

Sub RangeCharactersCount()

    Const cSheet As String = "Sheet1"   ' Source Worksheet Name
    Const cSrc As String = "A1:A10"     ' Source Column Range
    Const cTgt As String = "B1"         ' Target First Cell Range
    Const c1 As Long = 65               ' First Character Code ("A")
    Const c2 As Long = 90               ' Last Character Code  ("Z")

    Dim vntS As Variant   ' Source Array
    Dim vntT As Variant   ' Target Array
    Dim i As Long         ' Source Array Element Counter, Character Counter
    Dim strB As String    ' Concat String
    Dim LenT As Long      ' Current Length

    ' Copy Source Column Range to Source Array.
    vntS = ThisWorkbook.Worksheets(cSheet).Range(cSrc)
    ' Loop through elements of Source Array.
    For i = 1 To UBound(vntS)
        ' Concatenate Concat String and current element of Source Array.
        strB = strB & vntS(i, 1)
    Next

    ' Resize Target Array to number of characters rows and 2 columns.
    ReDim vntT(1 To c2 - c1 + 1, 1 To 2)

    ' Loop through Characters.
    For i = c1 To c2
        ' Write length of Concat String to Current Length.
        LenT = Len(strB)
        ' Replace all occurrences of current letter with empty string ("").
        strB = Replace(strB, Chr(i), "", , , vbTextCompare)
        ' Write current letter to 1st column of Target Array.
        vntT(i - c1 + 1, 1) = Chr(i)
        ' Write number of occurrences (the difference between Current Length
        ' and the length of Concat String) of current letter to 2nd column of
        ' Target Array.
        vntT(i - c1 + 1, 2) = LenT - Len(strB)
    Next

    With ThisWorkbook.Worksheets(cSheet).Range(cTgt)
        ' Clear contents of Target Range (from Target First Cell Range to
        ' last cell of 2nd column).
        .Resize(.Parent.Rows.Count - .Row + 1, 2).ClearContents
        ' Copy Target Array to Target Range.
        .Resize(UBound(vntT), UBound(vntT, 2)) = vntT
    End With

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM