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

时间:2016-08-14 11:35:29

标签: excel vba

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

例如:

enter image description here

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

感谢您的帮助!

4 个答案:

答案 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会在公式周围放置大括号 {...}

enter image description here

如果您更喜欢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

两点:

  1. 在VBA编辑器中,您需要设置References > Microsoft VBScript Regular Expressions 5.5
  2. 您可以在电子表格中调用该功能,例如=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))