如何结合数组公式与LARGE函数按周提取第3低价格?
嘿,这个需求用Excel的函数组合就能轻松搞定!我分两种常见场景给你讲清楚,不管你用的是新版还是旧版Excel都能用上:
方法一:适用于Excel 365/2021(支持动态数组)
假设你的「Week」列在A列,「Price」列在B列,直接用下面的公式就能自动生成所有周的第3低价格:
=BYROW(UNIQUE(A:A), LAMBDA(week, IFERROR(SMALL(FILTER(B:B, A:A=week), 3), "不足3个价格")))
拆解一下逻辑:
UNIQUE(A:A):先提取出所有不重复的周数,不用手动去列每一周;BYROW(...):遍历每个唯一的周,对每一周单独处理;FILTER(B:B, A:A=week):筛选出当前周对应的所有价格;SMALL(..., 3):从筛选出的价格里取第3低的那个;IFERROR(...):如果某一周的价格不足3个,会返回提示文本,避免出现错误值。
要是数据量很大,建议把整列引用(A:A、B:B)改成实际的数据范围,比如A2:A1000,这样公式运行会更流畅。
方法二:适用于旧版Excel(无动态数组,需数组公式)
如果你的Excel版本不支持动态数组,就用这个方法:
- 先把所有不重复的周数列出来(比如放在D列,D2输入「01」,D3输入「02」,以此类推);
- 在E2单元格输入下面的公式,然后按Ctrl+Shift+Enter(必须按这三个键触发数组公式):
=IFERROR(SMALL(IF(A:A=D2, B:B), 3), "不足3个价格")
- 把E2的公式往下拉,就能批量算出每一周的第3低价格。
逻辑解释:
IF(A:A=D2, B:B):生成一个数组,只有当A列的周数等于D2的周数时,返回对应的B列价格,否则返回FALSE;SMALL(..., 3):自动忽略FALSE值,从有效价格里取第3低的;IFERROR同样是用来处理价格不足3个的情况。
内容的提问来源于stack exchange,提问作者isic5
相关产品推荐
相关产品推荐

