计算单元格中的特定字符 – Excel
我想计算单元格中的所有特殊字符(!%_ *?+ – ,)。
例如:
用这个公式=LEN(D2)-LEN(SUBSTITUTE(D2;"!";""))
我只能计算一个字符,但是我需要在单个单元中计算多个字符…有没有办法如何调整这个?
谢谢您的帮助!
只使用公式,而不是VBA,这可以用以下两种方法:
考虑A1
的文字:
第一种方法:
多重嵌套SUBSTITUTE
:
=LEN(A1)-LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,",",""),"-",""),"+",""),"?",""),"*",""),"_",""),"%",""),"!",""))
第二种方法:
使用SUMPRDUKT
获取数组上下文中的MID
函数,以获得A1
每个string的单个字符与每个单个特殊字符的比较:
=SUMPRODUCT(--(MID(A1,ROW($1:$1000),1)={"!","%","_","*","?","+","-",","}))
你可以用一个简单的数组公式来做到这一点:
=SUM(LEN(A2) - LEN(SUBSTITUTE(A2,Special_Characters,"")))
Special_Characters
是列出所有特殊字符的范围。 如果您愿意,可以手动input它们作为数组常量:
=SUM(LEN(A2) - LEN(SUBSTITUTE(A2,{"%";"_";"*";"?";"+";"-";",";"!"},"")))
但命名的范围似乎更简单。
要数组input公式,在将公式input单元格或公式栏后,按住ctrl + shift同时按Enter键 。 如果你这样做是正确的,Excel将把括号{...}
放在公式的周围。
如果你喜欢VBA解决scheme,我会build议下面的代码。 您将需要修改.Pattern
以包含您不想计数的任何其他字符。 在下面的代码中,不是大写或小写字母或数字的任何字符将被计为特殊字符。
Option Explicit Function SpecialChars(S As String) As Long Dim RE As Object Set RE = CreateObject("vbscript.regexp") With RE .Global = True .Pattern = "[^A-Za-z0-9]" SpecialChars = Len(S) - Len(.Replace(S, "")) End With End Function
这里是我创build的一个简单的版本:
Function CountSpecialCharacters(rng As Range) As String Dim regEx As New RegExp, matches As MatchCollection With regEx .Global = True .MultiLine = True .IgnoreCase = False .Pattern = "[^a-zA-Z0-9]" '~~~> this counts any character not a to z or a number End With Set matches = regEx.Execute(rng) CountSpecialCharacters = matches.Count End Function
两点:
- 在VBA编辑器中,您需要设置“
References > Microsoft VBScript Regular Expressions 5.5
- 您在电子表格中调用函数eg
=CountSpecialCharacters(A2)
= 8 * LEN(D2)-LEN(SUBSTITUTE(D2; “!”; “”)) – LEN(替代(D2; “%”, “”)) – LEN(替代(D2; “_” “;” )) – LEN(SUBSTITUTE(D2;“*”;“”))-EN(SUBSTITUTE(D2;“?”;“”)) – LEN(SUBSTITUTE(D2;“+”;“”)) – LEN替代(D2; “ – ”, “”)) – LEN(替代(D2; “ ”;“”))