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