PAYATHON 2026

Excel 如何按每个项目的最近完成日期排序去重下拉列表?

数据小许

结论

先求出每个运动项目的最近完成日期,再按日期升序排列,最近完成的项目就会排在列表底部。

按现有公式假设,A 列是完成日期,B 列是运动项目。A 列存储有效的 Excel 日期,每个项目至少有一个有效日期。在支持所用函数和动态数组的 Excel 中,可以使用:

=LET(
    items,UNIQUE(FILTER(B2:B999,B2:B999<>"")),
    lastDates,MAXIFS(A2:A999,B2:B999,items),
    SORTBY(items,lastDates,1)
)

原公式为什么不符合预期?

你的公式是:

=UNIQUE(SORTBY(B2:B999, A2:A999,-1))

它先将所有记录按日期降序排列,再由 UNIQUE 按首次出现的顺序保留不同的项目。结果是,各项目按最近完成日期从新到旧排列,最近完成的项目排在前面。

直接把 -1 改成 1 也不行。日期升序后,每个项目最先出现的是它最早的记录,去重结果对应的就是各项目的最早完成日期。

要按最近完成日期升序排列,需要先求出每个项目的最大日期,再排序。

公式如何工作?

公式分为三个步骤:

  1. FILTER 排除空白项目,UNIQUE 得到不重复的项目名称。
  2. MAXIFS 根据项目名称查找 A 列中的最大日期,也就是该项目最近一次完成的日期。
  3. SORTBY 按这些日期升序排列项目,让最近完成的项目位于底部。

例如,有以下记录:

完成日期运动项目
2026-01-01深蹲
2026-01-05跑步
2026-01-10深蹲

深蹲的最近完成日期是 2026-01-10,跑步的是 2026-01-05,因此最终列表为:

跑步
深蹲

如果两个项目的最近完成日期相同,希望它们再按名称升序排列,可以把公式中的 SORTBY 一行改为:

SORTBY(items,lastDates,1,items,1)

将结果用于下拉列表

假设将完整公式输入同一工作表的 D2,并确保下方有足够的空白区域供结果溢出:

  1. 选中需要添加下拉列表的单元格。
  2. 打开“数据验证”,将允许类型设为“序列”。
  3. 将来源设为:
=$D$2#

# 表示引用 D2 的整个动态数组结果。源数据更新后,公式和下拉选项会随之更新;新增记录需要位于公式引用的范围内。

需要检查的地方

  • A 列必须是有效的 Excel 日期。仅修改显示格式不会把文本日期转换成真正的日期,MAXIFS 也不会按预期处理文本日期。
  • 项目名称中的多余空格可能让同一个项目被识别成不同值。
  • 如果 B 列范围内完全没有项目,当前 FILTER 会返回错误;这份公式以至少存在一个项目为前提。
  • 这里比较的是完成日期。如果你想按最后录入的行位置排序,即使补录的是较早日期也算“最近录入”,则需要改用行位置作为依据。

备注:内容仅供参考。