Power Query 系列 (09) - 合并查询,全面超越 VLookup 函数

VLookup 函数据说在 Excel 函数的使用频率排名前三,但这个函数也有不少局限性,Microsoft 推出了一个新的函数 XLookup 可以用于取代 VLookup。但 XLookup 目前还没有正式发布。处理多表连接,如果有多条件,之前我比较多的是用 MS Access 的查询,但现在有了 Power Query (PQ),在 Excel 中也能愉快的玩耍了。多条件连接准备放在下一篇。PQ 的查询表合并,实现将两个表横向合并,无论是界面友好性方面,还是功能上,都比 VLookup 强大太多。

举一个例子:现在有一个销售记录,需要从 Material Master 中获取物料的成本价和销售价:


这是 Excel VLookup 的典型场景,我们来看看 PQ 怎么实现。

从当前工作簿加载数据到 PQ

本篇介绍从 当前工作表导入数据到 PQ 的方法。在 Material Master 工作表中,选中数据区域,像下面这样:

然后同时按下 Ctrl + T,Excel 弹出“创建表” 对话框,将 A1:D4 这个区域 (Range) 变成一个 Table。Excel 的 Table 是和 Range 相对应的一个概念,在开发用 Excel Object 对象模型中,这个对象被称为 ListObject


点击数据区域任意单元格,Excel 会多出一个选项卡:【表设计】,切换到【表设计】,将表的名称改为 MaterialMasters。

用同样的方法根据 Sales Journals 工作表创建一个名为 SalesJournals 的表 (ListObject):


接下来,将 MaterialMasters 表和 SalesJournals 表中的数据加载到 PQ。选中 MaterialNasters 表中任意一个单元格,切换到【数据】选项卡:选择【获取数据】- 【自其他源】- 【自表格/区域】


表中的数据就被导入到 PQ,这是一从当前工作簿 (Current Workbook) 中加载数据到 PQ 最方便的方法。下面给出操作的动图:


由于后面不需要对 MaterialMaster 查询进行输出显示,所以在【关闭并上载】时,选择【关闭并上载至】:

PQ 将界面切回到 Excel 工作表,弹出【导入数据】对话框:


选择【仅创建连接】,点击确定按钮,“仅创建连接”选项控制 MaterialMasters 查询表的数据不被加载到工作表中。下面是动图:

合并查询

用同样的方法将表 SalesJournal 数据加载到 PQ,这样我们现在有了两个查询。选中 SalesJournals 查询,切换到【主页】,点击【合并查询】:

弹出【合并】对话框,选中 SalesJournal 表的 MaterialNo 字段,然后在中间第二个表中选择 MasterMaters 查询表,也选中第二个表MaterialNo 字段,作为两个表的关联条件。

在连接种类中,选择【左外部】,然后点击确定按钮。PQ 在 SalesJournal 查询表中新建了一个字段:


MaterialMaster 列是一个结构化列,结构化列的每个单元格包含结构化信息,比如 MaterialMaster 字段包含物料的多个信息。结构化列是 PQ 很重要特征,后面会专门写一篇结构化列的博客来介绍其用法。选中 MasterialMaster 字段任意一个单元格,显示区下面部分相应显示对应物料主数据的信息:


下面是合并查询的动图:


点击 MaterialMaster 列的【展开】图标,将 MaterialMaster 列进行展开 (expand):


只选择我们需要的 Cost 和 Price 两个字段:


点击确定按钮,获取 Price 和 Cost 的连接:


新建一列,计算每一行的利润:


完成后点击【关闭并上载】,数据加载至 Excel 工作表。

连接类型

合并查询中。两个表的连接类型有下面几种,相当于数据库中两个表的连接类型。熟悉数据库 SQL 语句的人一看就知道怎么回事。

各种连接的图解说明如下:


示例数据:

github

### Excel VLOOKUP 函数工作使用教程 #### 1. 基本概念 VLOOKUP 是一种用于垂直查找的函数,在给定列中搜索特定值并返回相应行中的其他值。当涉及多个工作时,此功能特别有用,可以轻松地在一个工作中查找另一个工作的数据。 #### 2. 工作使用语法 要使 `VLOOKUP` 函数越不同的工作,需在公式中明确指出目标范围所在的工作名称。基本语法如下: ```excel =VLOOKUP(lookup_value, sheet_name!table_array, col_index_num, [range_lookup]) ``` 其中: - `lookup_value`: 需要在第一个列中查找的值。 - `sheet_name`: 含有数据的目标工作名。 - `table_array`: 数据区域地址。 - `col_index_num`: 返回值所在的列号。 - `[range_lookup]`: 可选参数,默认为近似匹配;通常设置为 `FALSE` 示精确匹配[^1]。 #### 3. 实际案例演示 假设有一个名为 "成绩" 的工作记录着学生的考试分数,并且想要基于学号在另一张叫作 "学生信息" 的工作里获取对应的学生姓名。 | 学生信息 | 成绩 | | --- | --- | | 学号(A) | 名字(B) | ... | 学号(D) | 分数(E) | 为了完成这个任务,可以在 “成绩” 工作 E 列输入以下公式来提取对应的 B 列的名字: ```excel =VLOOKUP(D2,'学生信息'!A:B,2,FALSE) ``` 这条语句的意思是在 "学生信息" 这个工作 A 和 B 列组成的范围内寻找 D2 单元格里的学号,并返回第二列即名字的信息[^2]。 #### 4. 注意事项 - 如果两个工作簿不在同一个文件夹下,则需要提供完整的路径链接至外部文件。 -引用其他工作簿内的单元格或区域时,记得保存所有打开的相关文档以保持连接有效性。 - 对于较大的数据库查询操作建议采用更高效的替代方案如 INDEX-MATCH 组合或是 Power Query 功能[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值