基于Supplier ID和日期批量提取Excel燃气价格的技术问询
解决燃气价格数据多条件提取问题
核心问题拆解
你遇到的问题本质是多条件匹配(Supplier ID + Gas type) + 动态列匹配(日期标题/特殊列),之前只用Supplier ID匹配会返回第一行数据,是因为没有结合Gas type生成唯一匹配键。下面分Excel版本给出具体解决方案:
方案1:Excel 365/2021(支持动态数组,推荐)
假设:
- 输入的Supplier ID存于
$P$2,目标日期存于$Q$2 - 数据区域为
$B$2:$M$1000(B=Supplier ID,C=Gas type,D1:M1=列标题,含日期和Ramp Price)
1. 提取匹配的所有Gas type
在P4单元格输入公式,自动生成所有符合条件的燃气类型列表:
=FILTER($C$2:$C$1000,$B$2:$B$1000=$P$2,"未找到匹配供应商")
2. 提取Ramp Price(同步最新日期价格)
Ramp Price需要匹配最新日期的价格,在Q4输入:
=INDEX($D$2:$M$1000,MATCH($P$2&P4,$B$2:$B$1000&$C$2:$C$1000,0),MATCH(XLOOKUP(TRUE,$D$1:$M$1<>"",$D$1:$M$1,,0,-1),$D$1:$M$1,0))
XLOOKUP(...):定位最后一个非空的日期列(即最新日期)$P$2&P4:用Supplier ID+Gas type生成唯一匹配键,避免只取第一行数据
3. 提取目标日期对应价格
在R4输入,提取指定日期的价格(无数据时返回提示):
=IFERROR(INDEX($D$2:$M$1000,MATCH($P$2&P4,$B$2:$B$1000&$C$2:$C$1000,0),MATCH($Q$2,$D$1:$M$1,0)),"无对应价格")
4. 扩展提取J-M列其他价格
重复步骤3,替换MATCH($Q$2,...)为对应列的匹配条件即可。
方案2:旧版Excel(不支持动态数组)
方法:添加辅助列+数组公式
- 添加唯一键辅助列:在A列输入
=B2&C2,下拉填充,生成Supplier ID+Gas type的唯一标识。 - 提取Gas type列表:在
P4输入数组公式(输入后按Ctrl+Shift+Enter),下拉到出现#NUM!停止:
=INDEX($C$2:$C$1000,SMALL(IF($B$2:$B$1000=$P$2,ROW($B$2:$B$1000)-ROW($B$2)+1),ROW(A1)))
- 提取Ramp Price:输入数组公式(按
Ctrl+Shift+Enter):
=INDEX($D$2:$M$1000,MATCH($P$2&P4,$A$2:$A$1000,0),MATCH(MAX(IF($D$1:$M$1<>"",VALUE($D$1:$M$1),0)),$D$1:$M$1,0))
- 提取目标日期价格:输入数组公式(按
Ctrl+Shift+Enter):
=IFERROR(INDEX($D$2:$M$1000,MATCH($P$2&P4,$A$2:$A$1000,0),MATCH($Q$2,$D$1:$M$1,0)),"无对应价格")
注意事项
- 确保Supplier ID、日期的格式与数据区域完全一致(比如数值/文本统一,日期格式匹配)
- 如果Ramp Price列本身已预填最新日期价格,直接提取J列即可,无需动态匹配最新日期
内容的提问来源于stack exchange,提问作者Noah Khounsombath
相关产品推荐
相关产品推荐

