【问题标题】:Alpha Numeric Validation in Microsoft ExcelMicrosoft Excel 中的字母数字验证
【发布时间】:2020-12-20 06:00:11
【问题描述】:

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

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

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

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

5-我创建了一个验证公式。它工作正常,除了它不能验证字符串中的第二个字符作为字母。我使用 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))))

【问题讨论】:

  • 我想到了条件格式和文本函数,例如 left() 和 len()。但是要付出一些努力,这不是免费的编码服务。不过我已经给你提示了。

标签: excel validation formula alphanumeric


【解决方案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)&gt;6 - 检查字符串是否超过 6 个字符。
      • LEN(A1)&lt;9 - 检查字符串是否小于 9 个字符。
      • ISNUMBER(RIGHT(A1,6)*1 - 检查最右边的 6 个字符是否构成一个数值。
      • CODE(A1)&gt;64,CODE(A1)&lt;91 - 检查最左边的字符是否在 [A-Z] 类中。
    • IF( - 检查以下内容:
      • LEN(A1)=8 - 检查长度是否实际为 8。
        • AND( - 如果 TRUE 则检查以下内容:
          • CODE(MID(A1,2,1))&gt;64,CODE(MID(A1,2,1))&lt;91 - 检查第二个字符是否在课堂上 [A-Z]
        • 1 - 如果长度不为假,它仍然是 7,因此我们返回一个 1(等于 TRUE),以免与我们的父级 AND() 混淆。

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


或者,如果您有 Excel 2019 或更高版本,并且您喜欢代码高尔夫,您可以使用:

=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))

【讨论】:

  • 非常感谢亲爱的@JvdV。您的解决方案运行良好,非常棒。
  • @MuhammadRehan,很高兴听到。您可以勾选答案左侧的复选标记以关闭线程。
  • @MuhammadRehan 你选择了我的答案,而不是 JvdV 的。 :S
【解决方案2】:

您的条件不排除像 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))

【讨论】:

  • 我再次检查过,并且确实这 not 正确验证。它验证:B123456TRUEFD000052FALSE。两者都不正确。您的改进修复了最后一种情况,但仍然验证了 [A-Z] 之外的错误前导字符。
  • 嗯,我没有将“特殊字符”视为“:”。我的错。我不明白为什么 FD000052 不起作用。您是否在字符串的末尾放置了一个空格?在这种情况下,它又是一个“特殊字符”错误。在我更改公式时检查 JvdV 解决方案是否有效。猜猜 JvdV UNICODE 方法是正确的方法。
  • 请注意,您的两个版本都验证了A5656569,我猜这意味着失败,超过 6 位数。
  • @JvdV ye,但这并不违反提问者的指示,我在回答的开头已经加了下划线。
  • Op 在他的问题中特别提到 A5656569 是不允许
猜你喜欢
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多