You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求修复Google Sheets中车型年份序列中断复现后的失效公式

修复Google Sheets摩托车年份序列格式化问题

需求总结

手头有大量摩托车品牌/车型数据,现有公式在年份序列出现「连续-中断-再连续」的情况时无法正常工作,需要实现:

  • 自动识别年份序列的中断点,拆分独立序列
  • 连续年份合并为起始-结束格式(如1974-1977)
  • 非连续年份/序列用逗号分隔,单个年份保留原数值

替代公式方案

单列已排序年份场景

假设年份数据在A2:A列,且已按升序排序(空值已过滤),使用以下公式即可生成格式化后的年份字符串:

=LET(
  sorted_years, SORT(FILTER(A2:A, A2:A<>"")),
  group_ids, SCAN(0, sorted_years, LAMBDA(prev, curr, IF(curr=prev+1, prev, curr))),
  grouped_ranges, BYROW(UNIQUE(group_ids), LAMBDA(gid,
    LET(
      group_years, FILTER(sorted_years, group_ids=gid),
      min_y, MIN(group_years),
      max_y, MAX(group_years),
      IF(min_y=max_y, min_y, min_y&"-"&max_y)
    )
  )),
  TEXTJOIN(", ", TRUE, grouped_ranges)
)

公式逻辑:

  1. 先过滤空值并排序年份,确保序列有序
  2. 用SCAN给每个连续年份组标记唯一起始ID,中断点会生成新ID
  3. 对每个分组,取首尾年份,相同则显示单个值,不同则生成范围字符串
  4. 最后用TEXTJOIN把所有结果用逗号连接

按品牌/车型分组处理场景

如果需要按品牌(B列)、车型(C列)分别处理对应年份(A列),可以用BYROW结合上述逻辑,示例如下(假设D列是唯一品牌-车型组合,可通过UNIQUE(B2:B&"|"&C2:C)生成):

=BYROW(D2:D, LAMBDA(item,
  IF(item="", "",
    LET(
      brand, INDEX(SPLIT(item, "|"),1),
      model, INDEX(SPLIT(item, "|"),2),
      sorted_years, SORT(FILTER(A:A, B:B=brand, C:C=model, A:A<>"")),
      group_ids, SCAN(0, sorted_years, LAMBDA(prev, curr, IF(curr=prev+1, prev, curr))),
      grouped_ranges, BYROW(UNIQUE(group_ids), LAMBDA(gid,
        LET(
          group_years, FILTER(sorted_years, group_ids=gid),
          min_y, MIN(group_years),
          max_y, MAX(group_years),
          IF(min_y=max_y, min_y, min_y&"-"&max_y)
        )
      )),
      TEXTJOIN(", ", TRUE, grouped_ranges)
    )
  )
))

旧版Google Sheets兼容方案

如果你的Google Sheets版本不支持LET/LAMBDA函数,使用以下兼容公式:

=TEXTJOIN(", ", TRUE, ARRAYFORMULA(IF(
  ISNA(MATCH(FILTER(A2:A, A2:A<>"")-1, FILTER(A2:A, A2:A<>""), 0)),
  IF(ISNA(MATCH(FILTER(A2:A, A2:A<>"")+1, FILTER(A2:A, A2:A<>""), 0)),
    FILTER(A2:A, A2:A<>""),
    FILTER(A2:A, A2:A<>"")&"-"&LOOKUP(1, 0/(MATCH(FILTER(A2:A, A2:A<>"")+ROW(INDIRECT("A1:A"&COUNTA(A2:A))), FILTER(A2:A, A2:A<>""), 0)=0), FILTER(A2:A, A2:A<>""))
  ),
  ""
)))

兼容版通过匹配前后年份标记连续序列的起始和结束,适配旧版本。

内容的提问来源于stack exchange,提问作者Marty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 21:07:18