我想计算一个单元格中的所有特殊字符(!%_*?+ - ,).
例如:
使用这个公式,=LEN(D2)-LEN(SUBSTITUTE(D2;"!";""))我只能计算一个字符,但我需要计算单个单元格中的多个字符...有没有办法如何调整这个?
谢谢您的帮助!
仅使用公式而不是VBA,可以使用以下两种方法:
考虑以下文字A1:
第一种方法:
多个嵌套SUBSTITUTE:
=LEN(A1)-LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,",",""),"-",""),"+",""),"?",""),"*",""),"_",""),"%",""),"!",""))
Run Code Online (Sandbox Code Playgroud)
第二种方法:
使用SUMPRDUKT用于获取MID在阵列上下文功能得到在绳子的单charachter A1每单特殊字符进行比较:
=SUMPRODUCT(--(MID(A1,ROW($1:$1000),1)={"!","%","_","*","?","+","-",","}))
Run Code Online (Sandbox Code Playgroud)
您可以使用简单的数组公式执行此操作:
=SUM(LEN(A2) - LEN(SUBSTITUTE(A2,Special_Characters,"")))
Run Code Online (Sandbox Code Playgroud)
Special_Characters是列出所有特殊字符的范围.如果您愿意,可以手动输入它们作为数组常量:
=SUM(LEN(A2) - LEN(SUBSTITUTE(A2,{"%";"_";"*";"?";"+";"-";",";"!"},"")))
Run Code Online (Sandbox Code Playgroud)
但命名范围似乎更简单.
要数组输入公式,在将公式输入单元格或公式栏后,按住
ctrl+ shift同时点击enter.如果您正确执行此操作,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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2660 次 |
| 最近记录: |