如何统计Excel中特定types的字符

我想要计算一个单元格中出现多less个小写字符,然后出现多less个大写字符以及出现多less个特殊字符。 我怎么能做到这样的事情?

考虑以下四个用户定义函数:

Public Function LowC(r As Range) As Long Dim s As String, ch As String Dim IAmTheCount As Long, L As Long s = r.Text IAmTheCount = 0 For L = 1 To Len(s) If Mid(s, L, 1) Like "[az]" Then IAmTheCount = IAmTheCount + 1 End If Next L LowC = IAmTheCount End Function Public Function HighC(r As Range) As Long Dim s As String, ch As String Dim IAmTheCount As Long, L As Long s = r.Text IAmTheCount = 0 For L = 1 To Len(s) If Mid(s, L, 1) Like "[AZ]" Then IAmTheCount = IAmTheCount + 1 End If Next L HighC = IAmTheCount End Function Public Function NumC(r As Range) As Long Dim s As String, ch As String Dim IAmTheCount As Long, L As Long s = r.Text IAmTheCount = 0 For L = 1 To Len(s) If Mid(s, L, 1) Like "[0-9]" Then IAmTheCount = IAmTheCount + 1 End If Next L NumC = IAmTheCount End Function Public Function OtherC(r As Range) As Long OtherC = Len(r.Text) - LowC(r) - HighC(r) - NumC(r) End Function 

它们将在单个单元格中返回大写字母,小写字母,数字和其他字符的数量。

尽pipeVBA对我来说似乎简单得多,但它也可以使用Excel函数。

使用Excel函数:

大写数:

 =SUMPRODUCT((MID(A1,ROW(INDIRECT("1:99")),1)>="A")*(MID(A1,ROW(INDIRECT("1:99")),1)<="Z")*EXACT(MID(A1,ROW(INDIRECT("1:99")),1),UPPER(MID(A1,ROW(INDIRECT("1:99")),1)))) 

小写数

 SUMPRODUCT((MID(A1,ROW(INDIRECT("1:99")),1)>="A")*(MID(A1,ROW(INDIRECT("1:99")),1)<="Z")*EXACT(MID(A1,ROW(INDIRECT("1:99")),1),LOWER(MID(A1,ROW(INDIRECT("1:99")),1)))) 

数字计数

 =SUMPRODUCT(--ISNUMBER(-MID(A1,ROW(INDIRECT("1:99")),1))) 

特价商品

 =LEN(A1)-SUM(SUMPRODUCT((MID(A1,ROW(INDIRECT("1:99")),1)>="A")*(MID(A1,ROW(INDIRECT("1:99")),1)<="Z")*EXACT(MID(A1,ROW(INDIRECT("1:99")),1),UPPER(MID(A1,ROW(INDIRECT("1:99")),1)))),SUMPRODUCT((MID(A1,ROW(INDIRECT("1:99")),1)>="A")*(MID(A1,ROW(INDIRECT("1:99")),1)<="Z")*EXACT(MID(A1,ROW(INDIRECT("1:99")),1),LOWER(MID(A1,ROW(INDIRECT("1:99")),1)))),SUMPRODUCT(--ISNUMBER(-MID(A1,ROW(INDIRECT("1:99")),1))))