Microsoft 中的字母数字验证 Excel

Alpha Numeric Validation in Microsoft Excel

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

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

3- 在字符串末尾 Numerics 的长度始终为 6 个字符。

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

5-我创建了一个验证公式。它工作正常,除了它无法将字符串中的第二个字符验证为 alphabate。我使用 AP656569 和 A5656569 进行测试。它应该只允许 AP656569,但相反它允许两个字符串。

公式:=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))
  • =AND( - 让我们检查两件事:
    • AND( - 检查多个条件是否为TRUE
      • LEN(A1)>6 - 检查字符串是否超过 6 个字符。
      • LEN(A1)<9 - 检查字符串是否少于 9 个字符。
      • ISNUMBER(RIGHT(A1,6)*1 - 检查最右边的 6 个字符是否组成一个数值。
      • CODE(A1)>64,CODE(A1)<91 - 检查最左边的字符是否在 class [A-Z].
    • IF( - 检查以下内容:
      • LEN(A1)=8 - 检查长度是否实际为 8。
        • AND( - 如果 TRUE 则检查以下内容:
          • CODE(MID(A1,2,1))>64,CODE(MID(A1,2,1))<91 - 检查第二个字符是否在 class [A-Z].
        • 1 - 如果长度不为假,它仍然是7,因此我们return一个1(等于TRUE),不要乱我们的 parent AND().

如果您想避免虚假数据,您可以将其作为公式应用于您的自定义验证规则,或者如果您希望在输入虚假数据后能够显示虚假数据,则如条件格式的注释中所述。


或者,如果您有 Excel 2019 年或更高版本,并且您喜欢 code-golf,您可以使用:

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

您的条件不排除像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 函数,包含:

  • 检查字符串长度的条件:OR(LEN(A1)=7,LEN(A1)=8)
  • 检查字符串的前 2 个字符是否为字母的条件(仅第一个或两个):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)))
  • 每后6个字符判断是否为数字的条件(例子参考第一个):IFERROR(MID(RIGHT(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))

它仍然是一个 AND 函数。此更改:

  • 它包含一个条件来检查前 2 个字符是否为大写(以前使用 UNICODE 函数的每个字符都有 1 个):EXACT(LEFT(A1,2),UPPER(LEFT(A1,2))) [CREDIT: JvdV]
  • 它包含一个检查最后 6 个字符是否为数字的条件(以前使用 IFERROR 函数的每个字符都有 1 个):ISNUMBER(RIGHT(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))