在excel中检测“纯”字母

我试图从数字区分包含字母字符数据的单元格。 我已经部分成功地使用istext()和isnumber()。 但是,当字母数字字符出现这个逻辑失败。

我的意图是检测只有字母的细胞。 包含数字或字母数字字符的单元格需要被触发为false。

提前致谢。

=SUMPRODUCT(0+ISNUMBER(0+MID(A1,ROW(INDEX(A:A,1):INDEX(A:A,LEN(A1))),1)))=0

你也可以用CSE (CTRL + SHIFT + ENTER)稍微缩短一点:

=COUNT(0+MID(A1,ROW(INDEX(A:A,1):INDEX(A:A,LEN(A1))),1))=0

该构造被传递给MIDstart_num参数,即:

ROW(INDEX(A:A,1):INDEX(A:A,LEN(A1)))

是一个non-volatile (实际上,在工作簿中只是开放的,技术上是不稳定的) – 因此更可取 – 替代如:

ROW(INDIRECT("1:"&LEN(A1)))

问候

考虑这个小UDF()

 Public Function IsLetters(s As String) As Boolean Dim i As Long IsLetters = False For i = 1 To Len(s) If Not Mid(s, i, 1) Like "[a-zA-Z]" Then Exit Function Next i IsLetters = True End Function 

在这里输入图像描述

注意:

空格字符也会产生FALSE

您可以:

 IsAlpha = len(s) > 0 and not s like "*[!A-Za-z]*" 

你可以使用下面的正则expression式来testing字母表。

JavaScript代码:

= / ^ [A-ZA-Z()] + $ /testing(A1)

在这里输入图像说明

https://nxsheet.com/sheets/56db6ae444a4018c075e5672

如果你想避免macros,并希望使用它进行validation,或在一个条件格式规则来标记无效单元格,那么一个非vba公式是很好的。

我发现迄今为止没有凌乱的CODE()函数和ASCII值的唯一方法是使用SEARCH()像这样使用数组公式(按CTRL + SHIFT + ENTER):

IsPureAlpha :

 =MIN(--(ISNUMBER(SEARCH(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),"abcdefghijklmnopqrstuvwxyz"))))=1 

说明:

  • 使用MID函数将单元格A1中的string拆分为单个字符。
  • SEARCH() (不区分大小写)允许的[a-zA-Z]范围内的每个字符。
  • 将search结果数组转换为布尔值,然后使用--双重一元减法技巧转换为二进制。
  • 如果出现任何不允许的字符,则search结果数组将为0。否则对于有效的PureAlphastring,整个数组将为1。 MIN()将检测数组中的任何0。