求助:根据产品名及最新日期返回对应数值、化学品及数量的Excel公式
以下方案默认原始数据存储在名为数据源的工作表中,对应列规则:A列存储日期,B列存储化学品/产品名称,C列存储对应数值/数量,可根据你实际的表格结构调整引用范围。
需求1:根据产品名称匹配返回最新日期对应数值
Excel 365/2021及以上版本(支持动态数组函数)
假设你要查询的产品名称存放在当前工作表的A2单元格,在要返回结果的单元格输入以下公式即可:=XLOOKUP(MAXIFS(数据源!A:A,数据源!B:B,A2),数据源!A:A,数据源!C:C,"无匹配数据",0,1)
公式逻辑:先用MAXIFS提取指定产品对应的最大日期,再用XLOOKUP匹配该日期下该产品对应的数值。
旧版Excel(无XLOOKUP/MAXIFS函数)
使用数组公式,输入完成后需按Ctrl+Shift+Enter组合键生效:=INDEX(数据源!C:C,MATCH(1,(数据源!B:B=A2)*(数据源!A:A=MAX(IF(数据源!B:B=A2,数据源!A:A,0))),0))
需求2:在新表自动提取最新日期对应的所有化学品名称及数量
Excel 365/2021及以上版本
直接在新表A2(化学品名称列首个空白单元格)输入公式,会自动溢出填充所有最新日期的化学品名称:=FILTER(数据源!B:B,数据源!A:A=MAX(数据源!A:A),"无最新数据")
在B2(数量列首个空白单元格)输入公式,自动溢出填充对应数量:=FILTER(数据源!C:C,数据源!A:A=MAX(数据源!A:A),"无最新数据")
旧版Excel
在A2输入数组公式,按Ctrl+Shift+Enter组合键生效后,向下拖拽填充直到出现错误值即可:=INDEX(数据源!B:B,SMALL(IF(数据源!A:A=MAX(数据源!A:A),ROW(数据源!A:A),99999),ROW(A1)))
B2同理将公式中的数据源!B:B替换为数据源!C:C即可。
注意事项
如果同一天存在同一产品的多条记录,上述公式默认返回最后一条记录的数值,若需要汇总当日该产品的所有数值,可将公式替换为=SUMIFS(数据源!C:C,数据源!B:B,A2,数据源!A:A,MAXIFS(数据源!A:A,数据源!B:B,A2))
内容的提问来源于stack exchange,提问作者CLPowell

