在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
该构造被传递给MID
的start_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)
如果你想避免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。