问题描述
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))