比对Excel数据,何时用vlookup函数,何时用PowerQ
在Excel中要比对两列数据,我们最常用的是vlookup函数,估计很多人已经对这个函数用得滚瓜烂熟了。
既然vlookup函数如此好用,又有什么理由去用PowerQuery呢?
且听我慢慢道来。
如果只是偶尔一次的数据比对,请用vlookup函数
最常见的是偶尔比对一下班级中有哪些学员没报名参加某活动,或比对同一个客户是否在多个表中出现。
在这种情况下,比对只是偶尔发生。很显然,用vlookup函数是最简单最快捷的。
如果经常需要比对数据,请用PowerQuery来比对
比如每天都要比对两个表乃至N个表,或者每周都要比对,这种重复工作就交给PowerQuery来处理好了。
如果原始数据非常重要,需要尽量保证无损操作,还是建议用PowerQuery
有时候原始数据太重要,我们要避免对原始数据的任何有损操作,以免误操作之后破坏了原始数据,那么,我还是建议用PowerQuery,因为PowerQuery可以对原始数据进行无损操作——连它所在的位置都不用动一分一毫,更不用说直接在它上面进行有损操作了。
当然,用vlookup函数也能进行无损操作,比如复制原始数据到新的文件,或用公式引用原始数据文件的内容到新的文件,但操作起来比较复杂。
一个PowerQuery比对数据的例子
由于vlookup的教程实在太多,我就不再拾人牙慧重复一遍了。直接给出一个PowerQuery比对数据的例子。
假设:我们有一份《班级学员名单》,
班级学员表名单还有一份《报名表》,
报名表这是两个独立的Excel文件,分别放在不同文件夹下。
需求是找到哪些班级学员还没报名,并且,把《报名表》里不是本班的人标记出来进行下一步处理。
首先,分别引入《班级学员表》和《报名表》两个Excel文件到PowerQuery。
操作:新建一个Excel文件,目的是不对原始文件本身进行任何改动。然后在Excel中点击【数据】选项卡,选择【新建查询】-【从文件夹】-【从工作簿】引入原始文件。
比对Excel数据,何时用vlookup函数,何时用PowerQuery?在弹出窗口中找到需要引入的《班级学员表》,然后直接点“编辑”,
比对Excel数据,何时用vlookup函数,何时用PowerQuery?对它进行简单操作:在“查询设置”的“属性”下修改“名称”为“班级学员表“,免得和后面引入的报名表搞混;并将第一行提升为标题。
比对Excel数据,何时用vlookup函数,何时用PowerQuery?同样的操作,引入《报名表》。最后结果类似于下面这样:
比对Excel数据,何时用vlookup函数,何时用PowerQuery?PowerQuery中处理两个表格数据比对的思路。
当我们对两个表格进行数据比对时,可以把这两个表格看作两个集合,这样,对两个表格的比较就变成寻找两个集合的关系:
比对Excel数据,何时用vlookup函数,何时用PowerQuery?我们把班级学员名单想象为左边的绿色部分,报名表想象为放在右边的蓝色部分,这样,没报名的学员,我们可以简单理解我们能看得见的绿色部分。在PowerQuery中,用Table.NestedJion()函数的"JoinKind.LeftAnti"参数来表示这种关系。
新建一个空白查询,直接输入下面的代码即可得到未报名的学员:
比对Excel数据,何时用vlookup函数,何时用PowerQuery?= Table.NestedJoin(班级学员表,{"姓名"},报名表,{"姓名"},"报名表",JoinKind.LeftAnti)
那么,反过来,Table.NestedJion()函数的"JoinKind.RightAnti"就表示只存在于右边表(报名表)的元素:
= Table.NestedJoin(班级学员表,{"姓名"},报名表,{"姓名"},"报名表",JoinKind.RightAnti)
比对Excel数据,何时用vlookup函数,何时用PowerQuery?
其实,我们可以通过变换【= Table.NestedJoin(班级学员表,{"姓名"},报名表,{"姓名"},"报名表",JoinKind.LeftAnti)】中“班级学员表”和“报名表”的位置,就直接得出了不在班级学员表中的报名人员:
= Table.NestedJoin(报名表,{"姓名"},班级学员表,{"姓名"},"报名表",JoinKind.LeftAnti)
加载数据到Excel表格。
接下来把生成的结果加载到Excel表格,选中要加载的查询,点击“加载到”按钮,
比对Excel数据,何时用vlookup函数,何时用PowerQuery?在弹出窗口中选择加载到“表”:
比对Excel数据,何时用vlookup函数,何时用PowerQuery?然后再重命名下加载数据的sheet名称,免得搞混,即完成。
辛苦了一次,怎么终生轻松呢?
用PowerQuery处理表格数据比对的最大理由是可以辛苦一次,终生轻松,这样遇到同样的比对工作,就不用重复的步骤走了一遍又一遍了。
假设我这个比对工作要天天做、周周做、月月做。
现在我完成了今天的比对工作。
明天,新的报名表来了,我要怎么做呢?
我只需要把今天的报名表删除,把明天的报名表放到同样的位置(比如桌面),然后打开我刚才建立好的模型文件,刷新一下即可:
比对Excel数据,何时用vlookup函数,何时用PowerQuery?而班级学员表因为不会经常变动,所以我根本不用管它,保持在原位即可。就算有新增班级学员,我编辑该文件将其新增进去即可。
甚至还有更简单的办法:如果我有很多班级和报名表,每个班有个单独的文件夹,下面有班级学员表和报名表,我只需要借助PowerQuery的参数表格结合Excel的Cell()函数,建立来自于文件夹的数据源。
然后,每次需要某个班级的最新结果,就把该模型文件丢到该班级所在的文件夹,打开刷新,即可获取到最新结果。
结语
如果只是偶尔比对一下数据,直接用vlookup函数,便宜又实惠;如果经常要比对数据,那么可以试试看“辛苦一次,终生轻松”的PowerQuery大法。
当然,PowerQuery还有很多很多绝技。
有兴趣的不妨试试看,如果您尝试过程中遇到问题,请随时留言。