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

求助:如何用Excel函数按条件查找最近的过往日期?

如何用Excel函数获取每条记录的最近过往日期?

样本数据

Date(日期)Vendor(供应商)Func(功能)Name(名称)
1/1/2023A1AB
1/1/2023A2AC
1/1/2023B3AD
1/2/2023A1AB
1/2/2023A2AC
1/2/2023B3AD
1/4/2023A1AB
1/4/2023A2AC
1/4/2023B3AD
1/5/2023A1AB
1/5/2023A2AC
1/5/2023B3AD

期望输出

Date(日期)Vendor(供应商)Func(功能)Name(名称)Recent_Date(最近过往日期)
1/1/2023A1ABNull
1/1/2023A2ACNull
1/1/2023B3ADNull
1/2/2023A1AB1/1/2023
1/2/2023A2AC1/1/2023
1/2/2023B3AD1/1/2023
1/4/2023A1AB1/2/2023
1/4/2023A2AC1/2/2023
1/4/2023B3AD1/2/2023
1/5/2023A1AB1/4/2023
1/5/2023A2AC1/4/2023
1/5/2023B3AD1/4/2023

规则说明

  • 行的唯一标识为Date+Func组合
  • 最早日期(1/1/2023)无更早对应记录,返回Null
  • 后续日期返回同一Func下最近的更早日期

解决方案

方法1:MAXIFS函数(兼容多数Excel版本)

假设数据位于A2:D13区域,在E2单元格输入以下公式,下拉填充至整列:

=IFERROR(MAXIFS($A$2:$A$13,$A$2:$A$13,"<"&A2,$C$2:$C$13,C2),"Null")
  • MAXIFS:筛选同一Func下日期小于当前行的最大(最近)日期
  • IFERROR:无符合条件的日期时返回Null

方法2:XLOOKUP+动态数组(Excel 365/2021及以上)

在E2单元格输入以下公式,按回车后自动填充整列:

=BYROW(A2:C13,LAMBDA(x,LET(current_date,INDEX(x,1),current_func,INDEX(x,3),prev_dates,FILTER(A$2:A$13,(A$2:A$13<current_date)*(C$2:C$13=current_func),""),IF(COUNTA(prev_dates)=0,"Null",MAX(prev_dates)))))
  • BYROW:遍历每一行数据
  • LET:定义变量简化逻辑,提取当前行的日期和Func
  • FILTER:筛选同一Func下的更早日期,无结果时返回空值
  • 最终判断:无过往日期返回Null,否则取最近日期

注意事项

  • 确保A列是Excel可识别的日期格式(而非文本)
  • 如需返回空白而非Null文本,将公式中的"Null"替换为""

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:25:25