[英]Check if cell contains other characters than a-z; 0-9
我在excel中寻找一种方法来检查单元格中是否存在除字母az,数字0-9和字符“-”以外的其他字符
在“ A”列中,我列出了产品名称,例如
A1:三星S7黑色
A2:苹果手机6银
A3:huawei-p9限量版!
我想在“ B”列中获得以下信息
B1:
B2:
B3 :!
基本上,我正在寻找“否定”搜索,在该搜索中,我不定义不允许哪些字符,但更多的是允许在单元格中允许哪些字符并输出不匹配的字符。 如果没有VBA甚至可以做得更好。
如果您拥有Office 365 / Excel 2016,则可以在数组公式中使用TEXTJOIN
函数:
B1: =TEXTJOIN("",TRUE,IF((CODE(MID(A3,seq,1))>=97)*(CODE(MID(A3,seq,1))<=122)+(CODE(MID(A3,seq,1))=45)+ISNUMBER(--MID(A3,seq,1))=1,"",MID(A3,seq,1)))
由于这是一个数组公式,因此需要在按下Enter键的同时按住ctrl + shift来“确认”它。 如果正确执行此操作,Excel将按照公式栏中的说明在公式周围放置括号{...}
seq is a Name'd formula that refers to:
=ROW(INDEX(Sheet1!$1:$65535,1,1):INDEX(Sheet1!$1:$65535,LEN(INDIRECT("RC[-1]",FALSE)),1))
请注意,我们使用RC
版本的INDIRECT
因此该公式需要放置在要测试的字符串的相邻列中。
哦,如果您在实际数据中混合使用大小写,请将公式中的A1
替换为=LOWER(A1)
=TEXTJOIN("",TRUE,IF((CODE(MID(LOWER(A1),seq,1))>=97)*(CODE(MID(LOWER(A1),seq,1))<=122)+(CODE(MID(LOWER(A1),seq,1))=45)+ISNUMBER(--MID(LOWER(A1),seq,1))=1,"",MID(LOWER(A1),seq,1)))
如果没有TEXTJOIN
函数,则可以执行嵌套的SUBSTITUTE
或使用VBA解决方案。
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(LOWER(A1),"a",""),"b",""),"c",""),"d",""),"e",""),"f",""),"g",""),"h",""),"i",""),"j",""),"k",""),"l",""),"m",""),"n",""),"o",""),"p",""),"q",""),"r",""),"s",""),"t",""),"u",""),"v",""),"w",""),"x",""),"y",""),"z",""),"0",""),"1",""),"2",""),"3",""),"4",""),"5",""),"6",""),"7",""),"8",""),"9",""),"-","")
这是VBA解决方案。 将其放在工作簿模块中,可以使用=remove_alphanumeric(A1)
调用
Function remove_alphanumeric(InputString As String) As String
Dim i As Integer, strLen As Integer
Dim tmp_str As String, final As String
final = ""
i = 1
strLen = Len(InputString)
For i = 1 To strLen
tmp_str = Mid(InputString, i, 1)
If InStr(1, "abcdefghijklmnopqrstuvwxyz0123456789-", tmp_str) = 0 Then final = final + tmp_str
Next
remove_alphanumeric = final
End Function
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.