计算单元格中的特定字符数-Excel
我想计算单元格中的所有特殊字符(!%*?+-,) 例如: 使用这个公式,计算单元格中的特定字符数-Excel,excel,vba,Excel,Vba,我想计算单元格中的所有特殊字符(!%*?+-,) 例如: 使用这个公式,=LEN(D2)-LEN(替换为(D2;“!”;”)我只能数一个字符,但我需要在单个单元格中数多个字符……有没有办法调整 谢谢你的帮助 以下是我创建的一个简单版本: Function CountSpecialCharacters(rng As Range) As String Dim regEx As New RegExp, matches As MatchCollection With regEx
=LEN(D2)-LEN(替换为(D2;“!”;”)
我只能数一个字符,但我需要在单个单元格中数多个字符……有没有办法调整
谢谢你的帮助 以下是我创建的一个简单版本:
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正则表达式5.5
=CountSpecialCharacters(A2)
=8*LEN(D2)-LEN(代换)(D2;“!”;”)-LEN(代换)(D2;“%”;”)-LEN(代换)(D2;“*”;”)-LEN(代换)(D2;“?”;”)-LEN(代换)(D2;“+”;)-LEN(代换)(D2;“-”;)-LEN(代换)(D2;“;”,“;”)/p>仅使用公式,不使用VBA,以下两种方法是可行的: 考虑
A1
中的文本:
第一种方法:
多个嵌套的替换
:
=LEN(A1)-LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,",",""),"-",""),"+",""),"?",""),"*",""),"_",""),"%",""),"!",""))
第二种方法:
使用SUMPRDUKT
获取数组上下文中的MID
函数,以获取A1
中字符串的每个字符,并与每个特殊字符进行比较:
=SUMPRODUCT(--(MID(A1,ROW($1:$1000),1)={"!","%","_","*","?","+","-",","}))
您可以使用简单的数组公式执行此操作:
=SUM(LEN(A2) - LEN(SUBSTITUTE(A2,Special_Characters,"")))
特殊字符
是列出所有特殊字符的范围。如果愿意,可以手动将其作为数组常量输入:
=SUM(LEN(A2) - LEN(SUBSTITUTE(A2,{"%";"_";"*";"?";"+";"-";",";"!"},"")))
但命名范围似乎更简单
要数组,请在输入后输入公式 将公式输入单元格或公式栏,按住 按住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
你考虑过正则表达式吗?请参阅,以了解一个很好的起点…例如使用静态数组listGood非VBA解决方案的sumproduct选项。请参阅以获取允许的特殊字符(不确定OP是否只想计算他指定的字符数…)您好@AxelRichter,您是否测试了第二个公式?这对我不起作用。我建议
=SUMPRODUCT({1}*NOT(匹配(中间(A1,行($1:$1000),1),{“!”,“%,”,“?”,“+”,“-”,“,“},0)))
@Ulli Schmid:是的,我已经测试过了,它可以工作。用德文Excel,它是:=SUMMENPRODUKT(--)(TEIL(A6;ZEILE($1:$1000);1)={“!”%.”“+”,“}”)
。注意,数组文字必须是行向量。啊,是的,这很有意义。谢谢。{“!”\“%“\”*“\”?“\”+“\”-“\”,“}为我工作。