2016-03-05 119 views
2

我试图区分包含字母数字数据的单元格和数字单元格。我使用istext()& isnumber()取得了部分成功。但是,当字母数字字符出现时,此逻辑失败。在excel中检测“纯”字母

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

在此先感谢。

回答

2

=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)))

问候

+0

..........不错的公式........... –

+0

@ Gary的学生干杯! :-) –

+0

@XORLX标题说“纯字母”,但不会将此公式视为_- * ^等符号有效吗?似乎没有办法在不使用'CODE()'的情况下在公式中限制[a-zA-z]? –

2

考虑这个小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 

enter image description here

注:

空格字符也将产生FALSE

1

您可以:

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

如果要避免。宏并希望将其用于验证,或者在条件格式规则中标记无效单元格,则非vba公式很有用。

我发现迄今为此而不凌乱CODE()功能和ASCII值的唯一方法是用SEARCH()使用数组式(按CTRL + SHIFT + ENTER)是这样的:

IsPureAlpha :

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

说明:

  • 拆分该串中的单元格A1到individua l使用MID函数的字符。
  • SEARCH()(不区分大小写)表示允许的[a-zA-Z]范围内的每个字符。
  • 将搜索结果数组转换为布尔值,然后使用--双重一元减法技巧转换为二进制。
  • 如果存在任何不允许的字符,搜索结果数组将为0.否则对于有效的PureAlpha字符串,整个数组将为1。 MIN()将检测到阵列中的任何0。