Microsoft Excel中的字母数字验证

Microsoft Excel中的字母数字验证,excel,validation,formula,alphanumeric,Excel,Validation,Formula,Alphanumeric,1-我想对输入单元格使用验证规则,其中输入必须是7或8个字母数字字符长 2-在字符串开头,使用的字母必须是1或2个字符和大写字母 3-字符串末尾的数字长度始终为6个字符 4-需要验证以下类型的条目 FD456789 X256325 Z899666 DQ985421 FD000052 5-我已经创建了一个验证公式。它工作正常,只是无法将字符串中的第二个字符验证为alphabate。我使用P656569和5656569进行测试。它应该只允许ap6569,但恰恰相反,它同时允许两个字符串 公式:=AN

1-我想对输入单元格使用验证规则,其中输入必须是7或8个字母数字字符长

2-在字符串开头,使用的字母必须是1或2个字符和大写字母

3-字符串末尾的数字长度始终为6个字符

4-需要验证以下类型的条目 FD456789 X256325 Z899666 DQ985421 FD000052

5-我已经创建了一个验证公式。它工作正常,只是无法将字符串中的第二个字符验证为alphabate。我使用P656569和5656569进行测试。它应该只允许ap6569,但恰恰相反,它同时允许两个字符串

公式:
=AND(OR(LEN(A3)=7,LEN(A3)=8),ISNUMBER(VALUE(RIGHT(A3,6)),IF(LEN(A3)=7,NOT(ISNUMBER(VALUE(LEFT(A3,1))),ISTEXT(MID(A3,2,1)))
您可以尝试:

=AND(AND(LEN(A1)>6,LEN(A1)<9,ISNUMBER(RIGHT(A1,6)*1),CODE(A1)>64,CODE(A1)<91),IF(LEN(A1)=8,AND(CODE(MID(A1,2,1))>64,CODE(MID(A1,2,1))<91),1))

您的条件不排除像A1234567(1个大写字母,7个数字)这样的字符串。根据您的条件并假设字符串位于单元格A1中,此公式应适用:

=AND(OR(LEN(A1)=7,LEN(A1)=8),OR(IFERROR(LEFT(A1,1)*1,0)=0,AND(IFERROR(LEFT(A1,1)*1,0)=0,IFERROR(LEFT(A1,2)*1,0)=0)),UNICODE(A1)=UNICODE(UPPER(A1)),UNICODE(MID(A1,2,1))=UNICODE(UPPER(MID(A1,2,1))),IFERROR(MID(RIGHT(A1,6),1,1)*1,0),IFERROR(MID(RIGHT(A1,6),2,1)*1,0),IFERROR(MID(RIGHT(A1,6),3,1)*1,0),IFERROR(MID(RIGHT(A1,6),4,1)*1,0),IFERROR(MID(RIGHT(A1,6),5,1)*1,0),IFERROR(MID(RIGHT(A1,6),6,1)*1,0))
它基本上是一个AND函数,包含:

  • 检查字符串长度的条件:
    或(LEN(A1)=7,LEN(A1)=8)
  • 检查字符串的前两个字符是否为字母(仅第一个或两个字符):
    或(IFERROR(左(A1,1)*1,0)=0和(IFERROR(左(A1,1)*1,0)=0,IFERROR(左(A1,2)*1,0)=0)
  • 检查第一个字符是否为大写的条件:
    UNICODE(A1)=UNICODE(大写(A1))
  • 检查第二个字符是否为大写的条件:
    UNICODE(MID(A1,2,1))=UNICODE(UPPER(MID(A1,2,1)))
  • 检查最后6个字符是否为数字的条件(示例指第一个字符):
    IFERROR(中间(右(A1,6),1,1)*1,0)

编辑:改进

可以对公式进行如下改进:

=AND(OR(LEN(A1)=7,LEN(A1)=8),OR(IFERROR(LEFT(A1,1)*1,0)=0,AND(IFERROR(LEFT(A1,1)*1,0)=0,IFERROR(LEFT(A1,2)*1,0)=0)),EXACT(LEFT(A1,2),UPPER(LEFT(A1,2))),ISNUMBER(RIGHT(A1,6)*1))
它仍然是一个和函数。这将改变:

  • 它包含一个条件来检查前两个字符是否为大写(以前使用UNICODE函数的每个字符有一个):
    EXACT(左(A1,2),UPPER(左(A1,2))
    [CREDIT:]
  • 它包含一个条件,用于检查最后6个字符是否为数字(以前使用IFERROR函数的每个字符有1个):
    ISNUMBER(右(A1,6)*1)

编辑:更正

为了排除特殊字符,我编辑了公式:

=AND(OR(LEN(A1)=7,LEN(A1)=8),OR(AND(UNICODE(A1)>64,UNICODE(A1)<91,ISNUMBER(MID(A1,2,1)*1)),AND(UNICODE(A1)>64,UNICODE(A1)<91,UNICODE(MID(A1,2,1))>64,UNICODE(MID(A1,2,1))<91)),EXACT(LEFT(A1,2),UPPER(LEFT(A1,2))),ISNUMBER(RIGHT(A1,6)*1))

=和(或(LEN(A1)=7,LEN(A1)=8),或(和(UNICODE(A1)>64,UNICODE(A1)64,UNICODE(A1)64,UNICODE(MID(A1,2,1))条件格式和文本函数,如left()和LEN()请记住。但请付出一些努力,这不是一项免费的编码服务。不过,我已经给了你一些提示。我再次检查并发现这项服务没有正确验证。它验证了
:B123456
FD000052
。这两项都不正确。您的改进修复了上一个案例,但仍然验证了inc在代码< > [AZ] < /COD> > HM,我没有把“特殊字符”看作“:”我的坏。我不明白为什么FDO0552不能工作。你在字符串的末尾放置了一个空格吗?在这种情况下,它又是一个“特殊字符”。错误。在我更改公式时,检查JvdV解决方案是否有效。我想JvdV UNICODE方法是正确的。还要注意的是,您的两个版本都验证了
A5656569
,我想这是注定要失败的,超过6位。@JvdV ye,但这并不违背提问者的说明,我在回答的开头已经画了下划线。Op在他的问题中特别提到A5656569是不允许的。非常感谢亲爱的@JvdV。你的解决方案很好,很好。@MuhammadRehan,听到这个消息很高兴。你可以勾选答案左边的复选标记来结束线程。@MuhammadRehan你选择了我的答案,不是JvdV的:s
=AND(OR(LEN(A1)=7,LEN(A1)=8),OR(AND(UNICODE(A1)>64,UNICODE(A1)<91,ISNUMBER(MID(A1,2,1)*1)),AND(UNICODE(A1)>64,UNICODE(A1)<91,UNICODE(MID(A1,2,1))>64,UNICODE(MID(A1,2,1))<91)),EXACT(LEFT(A1,2),UPPER(LEFT(A1,2))),ISNUMBER(RIGHT(A1,6)*1))