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))
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
),不要乱我们的 parentAND()
.
如果您想避免虚假数据,您可以将其作为公式应用于您的自定义验证规则,或者如果您希望在输入虚假数据后能够显示虚假数据,则如条件格式的注释中所述。
或者,如果您有 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))