← 返回博客
教程2026年10月8日·5 分钟阅读

别再背 VLOOKUP 了:用 Power Query 合并查询做多表匹配,一次配置永久刷新

VLOOKUP 插一列就悄悄算错、几万行就卡到打不开?本文用一个订单匹配商品单价的完整案例,手把手演示 Power Query 合并查询的四步操作、M 代码写法、多列条件匹配与区间匹配技巧,并附上常见踩坑清单,把每周重复的匹配工作变成一键刷新。

📝

为什么该考虑放弃 VLOOKUP

VLOOKUP 是很多人学会的第一个「高级」函数,但它有三个绕不开的毛病:只能向右查找,返回列必须写在查找列右边;插入或删除列后 col_index_num 会悄悄错位,公式照常算出结果,却全是错的;几万行数据下拉整列公式,文件动辄卡到打不开。

而大多数 VLOOKUP 的真实用途其实是「把另一张表的信息贴过来」——这正是 Power Query 的「合并查询(Merge Queries)」最擅长的事。它的思路完全不同:不是在单元格里算一次,而是搭一条数据管道。源数据更新后,只要点一下「全部刷新」。

一个真实场景

假设你手上有两张表,放在同一个工作簿的两个工作表里。

订单表(表名 Orders):

订单号商品编码数量
SO-1001A20312
SO-1002B1175
SO-1003C3098

商品表(表名 Products):

商品编码商品名称单价供应商
A203无线键盘129深圳甲
B117显示器支架89东莞乙
C309USB 集线器45深圳甲

目标:给订单表补上商品名称和单价,并算出金额。

第 1 步:把两张表读进 Power Query

分别选中两个数据区域,按 Ctrl+T 转成表格,命名后到「数据」选项卡点「来自表格/区域」。两张表会以查询的形式出现在左侧查询窗格中。

第 2 步:新建合并查询

在「主页」选项卡点击「合并查询」→「将查询合并为新查询」。弹窗上半部分选 Orders,下半部分选 Products,然后分别单击两张表中的「商品编码」列——这一步等于告诉 Power Query:用这一列做关联键。

联接种类选「左外部(Left Outer)」,也就是以订单表为准,匹配不到就留空。生成的 M 代码是:

= Table.NestedJoin(Orders, {"商品编码"}, Products, {"商品编码"}, "Products", JoinKind.LeftOuter)

第 3 步:展开要用的列

结果里会多出一列叫 Products 的表格式列,点它标题右侧的展开图标,取消勾选「使用原始列名作为前缀」,只保留「商品名称」和「单价」。对应代码:

= Table.ExpandTableColumn(已合并, "Products", {"商品名称", "单价"}, {"商品名称", "单价"})

第 4 步:计算金额并上载

在「添加列」选项卡点「自定义列」,公式写 = [数量] * [单价],命名为「金额」。最后「主页」→「关闭并上载」,结果落到一张新工作表,同时生成一个查询,以后右键「刷新」即可。

如果改用 VLOOKUP,至少要写两条公式:

=VLOOKUP(B2, Products!$A:$D, 2, FALSE)
=VLOOKUP(B2, Products!$A:$D, 3, FALSE)

一旦有人在 Products 表的 A、B 列之间插一列,这两条公式不会报错,只会安静地返回错误数据——这才是 VLOOKUP 最危险的地方。

合并查询比 VLOOKUP 强在哪

对比项VLOOKUP合并查询
向左查找不支持任意方向
源表插列结果可能错乱不受影响
多列条件需拼辅助列按住 Ctrl 多选
数据量几万行开始卡顿十万行也顺畅
更新方式重新拖公式一键刷新
附带清洗无可修整、改类型、分组

进阶用法

多列联合作为匹配键

同一商品编码在不同供应商下可能重复,这时要同时按「商品编码」和「供应商」匹配。在合并查询弹窗里按住 Ctrl 依次点选两列,M 代码会写成 {"商品编码", "供应商"}。注意两边的点选顺序必须一致,否则匹配结果会错乱。

找出匹配不上的行

把联接种类换成「左反(Left Anti)」,返回的就是所有在商品表里找不到对应记录的错误订单,做数据核对时非常实用:

= Table.NestedJoin(Orders, {"商品编码"}, Products, {"商品编码"}, "未匹配", JoinKind.LeftAnti)

区间匹配

VLOOKUP 的近似匹配(第四参数为 TRUE)常被用来做阶梯定价、绩效分档。合并查询没有直接的近似匹配,两种替代方案:一是用「模糊匹配合并」并设置相似度阈值;二是先按区间下限排序,再用自定义列 = List.Last(List.Select(区间表[下限], each _ <= [数量])) 找到对应档位。

几个容易踩的坑

  • 键列类型不一致:一边是文本 "1001",一边是数字 1001,PQ 不报错,就是匹配不上。两列都设成「文本」最稳妥。
  • 看不见的空格:系统导出的数据常带首尾空格,先做「转换」→「格式」→「修整」再合并。
  • 数据源没转成表格:普通区域新增的行不会进入查询范围,务必 Ctrl+T。
  • 刷新报错:多半是文件路径变动或工作表被改名,到「数据源设置」里重新指向即可。

小结

判断标准很简单:如果这件事只做一次、数据量很小,直接用 XLOOKUP 更省事;如果它每周都要做、涉及多表关联、还要清洗和计算,那就用 Power Query 合并查询搭一条可刷新的管道。前者是函数思维,后者是流程思维——真正省时间的,往往是后者。

#Power Query#合并查询#VLOOKUP#数据匹配#Excel技巧

广告

相关推荐