在Excel数据验证中只允许数字0-9、数字0-9用逗号分隔或字母e或e

在Excel数据验证中只允许数字0-9、数字0-9用逗号分隔或字母e或e,excel,validation,excel-formula,Excel,Validation,Excel Formula,我要用这个问题来谋生。我有上一个问题,JvdV在以下方面勇敢地解决了这个问题: 现在,他们希望我允许字母e或e混合。要仅允许e,我尝试了: =IFERROR(FILTERXML("<t><s>"&SUBSTITUTE(B3,",","</s><s>")&"</s></t>","//s[preceding::*=. o

我要用这个问题来谋生。我有上一个问题,JvdV在以下方面勇敢地解决了这个问题:

现在,他们希望我允许字母e或e混合。要仅允许e,我尝试了:

=IFERROR(FILTERXML("<t><s>"&SUBSTITUTE(B3,",","</s><s>")&"</s></t>","//s[preceding::*=.  or .*0!=0 or .*1>9 or .*1<0 or .*0!='e']"),"")=""

=IFERROR(FILTERXML(“&SUBSTITUTE(B3),”,“,”)&“,”//s[前面:*=.or.*0!=0或.*1>9或.*1哈哈,你现在已经知道这个练习了。首先,我遵循了概述的解决方案,但这次决定再做一次尝试:

=IFERROR(FILTERXML("<t><s>"&SUBSTITUTE(A1,",","</s><s>")&"</s></t>","//s[preceding::*=. or not(translate(., 'abcdfghijklmnopqrstuvwxyzABCDFGHIJKLMNOPQRSTUVWXYZ', '')) or string-length(.)!=1]"),"")=""
尝试:

=IFERROR(FILTERXML(“&SUBSTITUTE(LOWER(A1)”,“,”,“,”)&“//s[字符串长度()!=1或(.*0!=0和.!='e')或之前的::*=。”“”“
XPATH
的解释:

  • //s
    -选择以下s节点:
    • 字符串长度(.!=1
      -节点不是由单个字符组成的。
      • -或对照:
    • (.*0!=0和.!='e')
      -如果乘以零,则节点不等于零,且节点不等于“e”)。
      • -或对照:
    • 前面::*=。
      -节点具有重复项

在您的上一个问题中,我将您链接到了Q&A。我建议您对此进行研究,并尝试熟悉
XPATH
语法,如果这是您必须在工作中解决的一个反复出现的问题。

JvdV在该答案中发布了一个有用的链接。您阅读了吗?这是否回答了您的问题?请注意,这允许使用类似#,$,!
待输入。我为您的尝试鼓掌=)我以前从来没有理由使用xpath。您的回答和解释非常有用。我不想让这看起来像是一个复制粘贴工作,只是添加了
e
,所以我在玩游戏,想出了列表的想法,并注意到需要向列表中添加其他不允许的字符;第二个变量是ion没有这个限制,主要是,我试图使解决方案更具可读性。@wp78de,我理解,它当然可以工作,因此我投了赞成票。到目前为止,还有一个问题(取决于OP是否故意提到“允许字母e或e混合在一起”)您允许使用类似
1,2,e,4,e
的字符串。不管是哪种方式,kudo对您来说都是如此,让我们说
FILTERXML()
在Excel上非常有趣。除了XPATH实际上是区分大小写的!这在
e
上不再适用。在
SUBSTITUTE()中的嵌套角色中添加
LOWER()
您将在那里=)。@Velocedge,这里需要做一个小提示:
LOWER()
防止同时使用“e”和“e”。因此,如果您希望实现这一点,您需要删除嵌套函数并扩展XPATH逻辑中介于两者之间的部分中的or逻辑。
=IFERROR(FILTERXML("<t><s>"&SUBSTITUTE(LOWER(A1),",","</s><s>")&"</s></t>","//s[preceding::*=.  or not(contains(.,'e')  or number(.)<10 or number(.)>-1) or string-length(.)!=1]"),"")=""
=IFERROR(FILTERXML("<t><s>"&SUBSTITUTE(LOWER(A1),",","</s><s>")&"</s></t>","//s[string-length(.)!=1 or (.*0!=0 and .!='e') or preceding::*=.]"),"")=""