计算单元格中的特定字符 - Excel

mak*_*roN 2 excel vba

我想计算一个单元格中的所有特殊字符(!%_*?+ - ,).

例如:

在此输入图像描述

使用这个公式,=LEN(D2)-LEN(SUBSTITUTE(D2;"!";""))我只能计算一个字符,但我需要计算单个单元格中的多个字符...有没有办法如何调整这个?

谢谢您的帮助!

Axe*_*ter 6

仅使用公式而不是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)


Ron*_*eld 5

您可以使用简单的数组公式执行此操作:

=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)