第一组:尝试定位数字位置

1. 错误的尝试

=IF(RIGHT(A1,1),RIGHT(A1,1),IF(RIGHT(A1,2),RIGHT(A1,2),RIGHT(A1,3)))
  • 意图:取最后1位,如果是数字则返回,否则尝试最后2位,再否则取最后3位
  • 问题RIGHT(A1,1) 返回的是文本,不是布尔值。在 IF 判断中,任何非空文本都被视为 TRUE,所以这个公式永远只会取最后1位,无法判断是否为数字

2. 固定位置截取

=LEFT(RIGHT(A1,7),3)  # 取最后7位的前3位
=LEFT(RIGHT(A1,6),2)  # 取最后6位的前2位
=LEFT(RIGHT(A1,5),1)  # 取最后5位的前1位

假设数据格式类似 "abc123""abc12""abc1"

  • 如果数字有3位,它会在倒数第4-7位之间
  • 如果数字有2位,它会在倒数第3-6位之间
  • 如果数字有1位,它会在倒数第2-5位之间

第二组:判断是否为数字

3. 使用 ISNUMBER 判断

=ISNUMBER(LEFT(RIGHT(A1,7),3))
  • 尝试判断截取的内容是否为数字
  • 问题LEFT(RIGHT(...)) 返回的是文本,ISNUMBER("123") 返回 FALSE
  • 这个公式实际无法正确判断

4. 条件提取(有缺陷)

=IF(ISNUMBER(LEFT(RIGHT(A1,7),3)),LEFT(RIGHT(A1,7),3),
   IF(ISNUMBER(LEFT(RIGHT(A1,6),2)),LEFT(RIGHT(A1,6),2),
      LEFT(RIGHT(A1,5),1)))
  • 因为 ISNUMBER 对文本返回 FALSE,所以永远走不到第一个条件
  • 会直接跳到最后的 LEFT(RIGHT(A1,5),1),只取最后5位的前1位

第三组:正确的判断方法

5. 使用 ISERROR + VALUE

ISERROR(VALUE(LEFT(RIGHT(A1,7),3)))
  • VALUE() 尝试将文本转换为数字

    • 如果文本是 "123",转换为数字 123,不报错
    • 如果文本是 "abc",转换失败返回 #VALUE! 错误
  • ISERROR() 判断是否出现错误
  • 这样就能正确判断截取的内容是否为纯数字

6. 正确的嵌套公式

=IF(ISERROR(VALUE(LEFT(RIGHT(A1,7),3))),
   IF(ISERROR(VALUE(LEFT(RIGHT(A1,6),3))),
      VALUE(LEFT(RIGHT(A1,5),2)),
      VALUE(LEFT(RIGHT(A1,6),3))),
   VALUE(LEFT(RIGHT(A1,7),3)))

逻辑流程

  1. 先尝试取最后7位的前3位,判断是否为数字
  2. 如果是数字 → 转换为数字并返回
  3. 如果不是数字 → 尝试取最后6位的前3位
  4. 如果是数字 → 转换为数字并返回
  5. 如果不是数字 → 取最后5位的前2位并返回

假设示例

A1提取结果说明
file123123取最后7位的前3位 = "123"
file1212取最后7位的前3位 = "ile12" 不是数字;取最后6位的前3位 = "le12" 不是数字;取最后5位的前2位 = "12"
file11类似流程,最终取到 "1"

改进建议

如果需要提取末尾数字,更简洁的方式是:

# 使用数组公式提取末尾数字(Ctrl+Shift+Enter)
=-LOOKUP(1,-RIGHT(A1,ROW($1:$10)))

# 或使用较新的函数(Excel 2019+)
=TEXTAFTER(A1," ", -1)  # 提取最后一个空格后的内容

总结:这套公式的核心逻辑是通过多次尝试不同长度的截取,配合 VALUE+ISERROR 判断是否为数字,最终提取出文本末尾的1-3位数字。

标签: none

添加新评论