我想计算一个单元格中的所有特殊字符(!%_ *?+ - ,)。
例如:
使用这个公式=LEN(D2)-LEN(SUBSTITUTE(D2;"!";""))
我只计算一个字符,但我需要计算单个单元格中的多个字符...有没有办法如何调整它?
感谢您的帮助!
答案 0 :(得分:6)
只使用公式,而不是VBA,这可以通过以下两种方法实现:
考虑A1
中的文字:
第一种方法:
多个嵌套SUBSTITUTE
:
=LEN(A1)-LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,",",""),"-",""),"+",""),"?",""),"*",""),"_",""),"%",""),"!",""))
第二种方法:
使用SUMPRDUKT
获取数组上下文中的MID
函数,以获取A1
中每个字符串的每个字符串与每个特殊字符进行比较:
=SUMPRODUCT(--(MID(A1,ROW($1:$1000),1)={"!","%","_","*","?","+","-",","}))
答案 1 :(得分:5)
您可以使用简单的数组公式执行此操作:
=SUM(LEN(A2) - LEN(SUBSTITUTE(A2,Special_Characters,"")))
Special_Characters
是列出所有特殊字符的范围。如果您愿意,可以手动将它们作为数组常量输入:
=SUM(LEN(A2) - LEN(SUBSTITUTE(A2,{"%";"_";"*";"?";"+";"-";",";"!"},"")))
但命名范围似乎更简单。
输入后, array-enter 一个公式
公式进入单元格或公式栏,按住
ctrl + shift ,同时按输入。如果你这样做了
正确地说,Excel会在公式周围放置大括号 {...}
。
如果您更喜欢VBA解决方案,我建议使用以下代码。您需要修改.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
答案 2 :(得分:0)
这是我创建的简单版本:
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
两点:
References > Microsoft VBScript Regular Expressions 5.5
=CountSpecialCharacters(A2)
答案 3 :(得分:0)
= 8 * LEN(D2)-LEN(SUBSTITUTE(D2;"&#34 ;;""!)) - LEN(替代(D2;"% #34 ;;"")) - LEN(替代(D2;" _&#34 ;;"")) - LEN(替代(D2;&#34 ; *&#34 ;;""))-LEN(SUBSTITUTE(D2;"?&#34 ;;"")) - LEN(SUBSTITUTE(D2) ;" +&#34 ;;"")) - LEN(替代(D2;" - &#34 ;;"")) - LEN (SUBSTITUTE(D2;"&#34 ;;"&#34))