Microsoft Excel 中的字母数字验证

问题描述

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

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

3- 在字符串的末尾,数字将始终为 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,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 - 检查最左边的字符是否在类 [A-Z] 中。
    • IF( - 检查以下内容:
      • LEN(A1)=8 - 检查长度是否实际为 8。
        • AND( - 如果 TRUE 则检查以下内容:
          • CODE(MID(A1,1))<91 - 检查第二个字符是否在类 [A-Z] 中。
        • 1 - 如果长度不为假,它仍然是 7,因此我们返回一个 1(等于 TRUE),以免与我们的父 {{1} 混淆}}。

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


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

AND()
,

您的条件不排除 A1234567 之类的字符串(1 个大写字母,7 个数字)。根据您的条件并假设您的字符串在单元格 A1 中,此公式应该有效:

=AND(OR(LEN(A1)=7,LEN(A1)=8),OR(IFERROR(LEFT(A1,1)*1,0)=0,AND(IFERROR(LEFT(A1,IFERROR(LEFT(A1,2)*1,0)=0)),UNICODE(A1)=UNICODE(UPPER(A1)),UNICODE(MID(A1,1))=UNICODE(UPPER(MID(A1,1))),IFERROR(MID(RIGHT(A1,6),1,0),3,4,5,6,0))

它基本上是一个 AND 函数,其中包含:

  • 检查字符串长度的条件:OR(LEN(A1)=7,LEN(A1)=8)
  • 检查字符串的前 2 个字符是否为字母的条件(仅第一个或两个):OR(IFERROR(LEFT(A1,0)=0))
  • 检查第一个字符是否为大写的条件:UNICODE(A1)=UNICODE(UPPER(A1))
  • 检查第二个字符是否为大写的条件:UNICODE(MID(A1,1)))
  • 最后 6 个字符的条件,用于检查它们是否为数字(示例指的是第一个):IFERROR(MID(RIGHT(A1,0)

编辑:改进

公式可以这样改进:

=AND(OR(LEN(A1)=7,EXACT(LEFT(A1,2),UPPER(LEFT(A1,2))),6)*1))

它仍然是一个 AND 函数。这是变化:

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

编辑:更正

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

=AND(OR(LEN(A1)=7,OR(AND(UNICODE(A1)>64,UNICODE(A1)<91,ISNUMBER(MID(A1,1)*1)),AND(UNICODE(A1)>64,1))<91)),6)*1))