计算单元格中的特定字符 – 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 

两点:

  1. 在VBA编辑器中,您需要设置“ References > Microsoft VBScript Regular Expressions 5.5
  2. 您在电子表格中调用函数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; “ ”;“”))