“检测”;纯粹的;excel中的字母表
我试图区分包含字母字符数据的单元格和数字单元格。我使用istext()和isnumber()取得了部分成功。但当出现字母数字字符时,这种逻辑就失效了 我的目的是检测只有字母的细胞。包含数字或字母数字字符的单元格需要被触发为false 提前感谢。“检测”;纯粹的;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,
=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
说明:
- 使用
函数将单元格A1中的字符串拆分为单个字符MID
(不区分大小写)用于允许[a-zA-Z]范围内的每个字符李>SEARCH()
- 使用
双一元减法将搜索结果数组转换为布尔值,然后转换为二进制--
- 如果存在任何不允许的字符,搜索结果数组将具有0。否则,对于有效的PureAlpha字符串,整个数组将为1s。
将检测数组中的任何0MIN()
=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