“检测”;纯粹的;excel中的字母表

“检测”;纯粹的;excel中的字母表,excel,excel-formula,excel-2013,vba,Excel,Excel Formula,Excel 2013,Vba,我试图区分包含字母字符数据的单元格和数字单元格。我使用istext()和isnumber()取得了部分成功。但当出现字母数字字符时,这种逻辑就失效了 我的目的是检测只有字母的细胞。包含数字或字母数字字符的单元格需要被触发为false 提前感谢。=SUMPRODUCT(0+ISNUMBER(0+MID(A1,ROW)(索引(A:A,1):索引(A:A,LEN(A1))),1))=0 您还可以在使用CSE(CTRL+SHIFT+ENTER)时使用略短的: =计数(0+MID(A1,行(索引(A:A,

我试图区分包含字母字符数据的单元格和数字单元格。我使用istext()和isnumber()取得了部分成功。但当出现字母数字字符时,这种逻辑就失效了

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

提前感谢。

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

您还可以在使用
CSE
(CTRL+SHIFT+ENTER)时使用略短的:

=计数(0+MID(A1,行(索引(A:A,1):索引(A:A,LEN(A1))),1))=0

此处传递给
MID
start\u num
参数的构造,即:

行(索引(A:A,1):索引(A:A,LEN(A1)))

是一种非易失性的(实际上,仅在工作簿打开时技术上易失性)-因此更可取-例如:

行(间接(“1:”&LEN(A1)))

考虑一下这个小UDF():

注:

空格字符也将产生假

您可以:

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

如果要避免使用宏并将其用于验证,或在条件格式规则中标记无效单元格,则最好使用非vba公式

到目前为止,我发现在没有凌乱的
code()
函数和ASCII值的情况下执行此操作的唯一方法是使用数组公式(按CTRL+SHIFT+ENTER)和
SEARCH()
,如下所示:

IsPureAlpha:

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

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

这是另一种可能更容易使用的方法:

=COUNT(FIND({"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"},A1))>0

@加里的学生干杯!:-)@XORLX的标题是“纯字母表”,但这个公式不认为像“-*^等”这样的符号是有效的吗?如果不使用
code()
?@AmitNaidu Yes,似乎无法在公式中限制为[a-zA-z]。如果可以使用这些字符,则需要修改此设置。
=COUNT(FIND({"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"},A1))>0