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

如何用Lookup函数匹配早于转移日期的最新历史发票单价

解决方法

针对数十万行的大数据量,推荐以下两种高效方案,避免嵌套IF+Index Match的低效率问题:

公式方案(Excel 365/2021 优先)

用LOOKUP函数的经典匹配逻辑,直接定位符合条件的最后一次开票单价,运算效率远高于嵌套数组公式。
假设表1结构:

  • A列:库存转移日期
  • B列:合并后的CustomerID&Part#
    表2结构:
  • D列:发票日期
  • E列:单价
  • F列:合并后的CustomerID&Part#

在表1的C2单元格输入公式(下拉填充):

=LOOKUP(2,1/((F$2:F$100000=B2)*(D$2:D$100000<A2)),E$2:E$100000)

注意:不要用整列引用(如F:F),替换成表2实际的行范围(比如F$2:F$100000),大幅提升运算速度。
公式原理:(F$2:F$100000=B2)*(D$2:D$100000<A2)生成仅包含1(符合条件)和0(不符合)的数组,1/转换为1或错误值,LOOKUP(2,...)会自动匹配最后一个1对应的单价。

如果用Excel 365,也可以用XLOOKUP实现更直观的匹配:

=XLOOKUP(TRUE,(F$2:F$100000=B2)*(D$2:D$100000<A2),E$2:E$100000,,"-1",1)

最后一个参数1表示反向查找,返回最后一个符合条件的结果。

Power Query 方案(大数据量最优)

数十万行数据用公式可能仍有卡顿,Power Query的批量处理更稳定高效:

  1. 将表1和表2分别转为Excel表格(Ctrl+T),命名为Table1和Table2
  2. 打开「数据」选项卡 → 「获取数据」→ 「从表格/区域」,分别导入两张表到Power Query编辑器
  3. 在Table1的编辑器界面,点击「合并查询」→ 合并Table1和Table2,匹配列选择合并后的CustomerID&Part#,合并类型选「左外部」
  4. 展开合并后的列,仅勾选「发票日期」和「单价」
  5. 添加自定义列,输入=[发票日期]<[库存转移日期],筛选该列为TRUE的行
  6. 点击「分组依据」,分组列选「合并后的CustomerID&Part#」和「库存转移日期」,新列名设为「最后单价」,操作选「最大值」,列选「发票日期」;再重复分组,这次操作选「提取值」,列选「单价」(确保对应最大发票日期的单价)
  7. 点击「关闭并上载」,将处理结果加载回Excel

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:37:24