在Excel中检查单元格是否包含非字母字符

25

有没有一种非VBA的方法来检查B列和C列是否包含任何非字母字符?请注意,这里的“非字母”是指不属于字母表(不区分大小写)的任何字符。

B列和C列是名字的列表,其中一些名字由于错误的数据录入而包含符号或数字。我正在尝试找到所有需要修复的名称,因此我需要找到包含任何非字母字符的名称。

2个回答

67

有一个“奇怪”的但简单且通用的答案。

=SUMPRODUCT(SEARCH(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),"abcdefghijklmnopqrstuvwxyz"))
  • 如果单元格 A1 包含任何非字母字符,则此公式返回 #VALUE! 错误;如果单元格 A1 仅包含字母,则返回数字;如果单元格 A1 为空,则返回 #REF! 错误。

  • 您可以将此公式括在 ISNUMBERISERR 中,以将其转换为 TRUE/FALSE 值。

  • SEARCH 替换为 FIND 可使其区分大小写。使用 FIND 将确保通配符字符“?~*”被视为非字母字符。

  • 您可以在字符串 "abc...xyz" 中放入任何字符。这使得测试字母数字、常见标点等变得容易。

"1:"&LEN(A1) 表示从第一个字母开始一直检查到最后一个字母。将其更改为 "2:"&(LEN(A1)-1) 将不会检查第一个和最后一个字母。


1
这个确实非常好用。非常感谢您对其工作原理的解释。我还有一个问题。如何让它接受空格?想法是单元格值为“Chad”是可以的,“Chad1”不行,而“O Neal”是可以的。 - Chad Portman
4
在字符串"abc...xyz"中加一个空格,即变成" abc...xyz" - Roobie Nuby
1
那很简单,我应该早点尝试。感谢你的帮助。 - Chad Portman

3

您可以使用26个嵌套的SUBSTITUTE函数从文本中删除所有字母字符。

如果还剩下任何东西,单元格将包含非字母字符。

感谢@RaGe指出您还需要检查空单元格:

=AND(ISTEXT(A2),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(A2),"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",) = "")

enter image description here


请注意,这也会将空单元格返回为TRUE。 - RaGe
哇,那真是太奇怪了,但它确实有效。我感觉一定有比26个嵌套公式更高效的方法,但它确实有效。谢谢你。我想我会暂时使用这个,直到我找到更简化的方法。 - Chad Portman
1
@nights,直到Roobie发布了一个更加优雅的解决方案才出现了:) - Rick Hitchcock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接