Excel按条件查找最早到期日期并填充I、J列的技术求助
解决Excel多条件匹配最早到期日及对应数量的问题
咱们先拆解你的需求核心:要为每条记录(对应主表A列的值),找出**匹配该记录、位置不是发货仓(G列≠2)**的库存明细里,到期日期(C列)最早的那条,然后返回它的到期日期(J列)和对应数量(I列)。你的原公式逻辑有几个关键问题,咱们一步步修正:
原公式的问题分析
你的公式IF(A2='Inventory Details'!A:A,IF('Inventory Details'!G:G=2,MIN('Inventory Details'!C:C)))存在三个核心漏洞:
- 条件写反了:你要排除发货仓,应该是
G:G<>2而不是G:G=2; - 未限定MIN的范围:直接用
MIN('Inventory Details'!C:C)会返回整个C列的最小值,没有关联“匹配A2”和“非发货仓”的条件,结果完全不对; - 未处理数量提取:原公式只尝试返回日期,没有逻辑对应到该日期下的数量。
正确公式实现
假设Inventory Details表中:
- A列是与主表匹配的关键字(比如物料号);
- C列是到期日期;
- G列是位置标识(2代表发货仓);
- D列是库存数量(对应你要的100)。
1. J列(最早到期日):用MINIFS多条件求最小值
直接用MINIFS函数,它专门用于多条件下的最小值计算,语法清晰且高效:
=MINIFS('Inventory Details'!C:C, 'Inventory Details'!A:A, A2, 'Inventory Details'!G:G, "<>2")
这个公式的逻辑是:在Inventory Details表的C列(到期日)中,找出满足「A列等于主表A2」且「G列不等于2(非发货仓)」的所有值里的最小值,也就是你需要的10/01/2019。
2. I列(对应数量):匹配最早日期的对应数量
如果你的Excel是365/2021版本,推荐用XLOOKUP实现多条件匹配,简单直观:
=XLOOKUP(1, ('Inventory Details'!A:A=A2)*('Inventory Details'!G:G<>"2")*('Inventory Details'!C:C=J2), 'Inventory Details'!D:D)
逻辑:找到同时满足「A列匹配A2」「非发货仓」「到期日等于J列的最早日期」的第一条记录,返回对应的D列数量(即100)。
如果是旧版Excel,用INDEX+MATCH组合(注意旧版需要按Ctrl+Shift+Enter作为数组公式输入):
=INDEX('Inventory Details'!D:D, MATCH(1, ('Inventory Details'!A:A=A2)*('Inventory Details'!G:G<>"2")*('Inventory Details'!C:C=J2), 0))
验证结果
把这两个公式分别填入J2和I2,下拉填充后,就能得到你预期的:对应记录的最早到期日10/01/2019,以及对应的数量100。
内容的提问来源于stack exchange,提问作者Nicholas Wood
相关产品推荐
相关产品推荐

