Excel无VBA公式实现:检测单元格字符串中的日期类模式(#/#或#.#)
Excel公式检测自由文本中的日期类简化模式(数字/数字或数字.数字)
问题核心
需要在不使用VBA的前提下,用Excel公式检测自由文本单元格中是否存在数字+"/"+数字或数字+"."+数字的模式(简化判定可能的日期格式),避免?/?这类通配符匹配非数字两侧的无效情况。
兼容所有Excel版本的公式
这个公式通过遍历1到10位数字的组合,精准检查是否存在符合要求的模式:
=SUMPRODUCT( --(ISNUMBER(SEARCH(REPT("[0-9]",ROW(INDIRECT("1:10")))&"/"&REPT("[0-9]",ROW(INDIRECT("1:10"))),A1))), --(ISNUMBER(SEARCH(REPT("[0-9]",ROW(INDIRECT("1:10")))&"."&REPT("[0-9]",ROW(INDIRECT("1:10"))),A1))) )>0
- 原理:
REPT("[0-9]",n)生成匹配n个数字的通配符规则;ROW(INDIRECT("1:10"))覆盖1到10位数字的常见场景;SEARCH查找对应模式,ISNUMBER判断是否找到;--将布尔值转为0/1,SUMPRODUCT求和后判断是否大于0(即存在至少一处匹配)。
Excel 365/2021简洁版公式
利用动态数组函数简化写法,逻辑更直观:
=OR( BYROW(SEQUENCE(10),LAMBDA(n,ISNUMBER(SEARCH(REPT("[0-9]",n)&"/"&REPT("[0-9]",n),A1)))), BYROW(SEQUENCE(10),LAMBDA(n,ISNUMBER(SEARCH(REPT("[0-9]",n)&"."&REPT("[0-9]",n),A1)))) )
- 原理:
SEQUENCE(10)生成1-10的数字序列,BYROW遍历每个数字长度,检查对应模式是否存在,OR只要任意一种模式匹配就返回TRUE。
示例验证
对应测试用例,公式结果完全符合预期:
| 字符串 | 预期结果 | 公式返回值 |
|---|---|---|
| In this cell there is no pattern to match to as the / and . characters do not have a number on both sides | FALSE | FALSE |
| In this cell there is a pattern 1/3/22 that looks like a date but isn't a recognised date format | TRUE | TRUE |
| In this cell there is a pattern 23.7.22 that looks like a date but isn't a recognised date format | TRUE | TRUE |
补充说明
- Excel中没有直接的数字通配符
#,单个数字需用[0-9]匹配;?会匹配任意单个字符,无法限定为数字,因此不能直接用?/?。 - 如果需要匹配更长的数字(比如超过10位),只需把公式中的
10改成对应数字即可。
内容的提问来源于stack exchange,提问作者Michael wilding
相关产品推荐
相关产品推荐

