怎样提取EXCEL表中多个SHEET中某列最后一个数据?


大家好,我是李锐,今天在Excel课程群里看到有同学提问如何从多个Excel工作簿中提取不重复值列表,再制作动态下拉菜单。

由于数据源分散在多个不同的Excel文件中,实际工作要求无论哪个文件中的数据源变动,结果中的合并报表和动态下拉菜单都可以自动更新,而且排除重复仅显示不重复值。

这类问题的处理方案较多,可以用power query或者sql查询,也可以用vba编程,虽然之前的图文教程或视频课程里面有包含此类知识点的案例,但今天这个问题要求多技术综合运用,所以专门用这篇教程给出完整操作过程。

除了本文内容,还想全面、系统、快速提升Excel技能,少走弯路的同学,请搜索微信公众号“LiRuiExcel”点击底部菜单,或下方二维码进知识店铺

更多不同内容、不同方向的Excel视频课程

首先我把需要用到的Excel文件都放在一个文件夹中,方便数据提取和后期更新。

Excel名称及文件夹位置如下图所示。


北京、上海、广州每个文件中都存放着员工的编号和姓名记录,要求从多个文件中提取不重复的员工记录。

看完文件夹位置和文件名称,下面再来看下每张Excel工作簿文件打开以后的样子。

先来看北京(为了方便大家查看仅给出少量数据,即使有大量数据也同样适用)




下面我们开始操作从多个Excel工作簿文件中提取不重复值。

首先介绍一种仅仅点几下鼠标,不需输入任何代码就可以搞定的方法:Power Query法,后面再介绍sql代码法,以及遇到其他要求的扩展应对方法。

首先打开要放置结果的Excel工作表,操作步骤如下图所示。


这里输入Excel文件所在的路径位置,操作步骤如下图所示。


pq会自动扫描指定位置的所有文件,如下图所示。


将数据源位置加载到pq编辑器,如下图所示:


筛选你需要的Excel工作簿文件,如下图所示:


然后单击Content字段右侧的扩展按钮,如下图所示:


再选择你要提取的数据所在的工作表,如下图所示:


然后整理数据源,设置标题行,如下图所示:


再清除多余的标题行记录,可以借助筛选批量去除勾选,如下图所示:


然后按照你所需要的规则选中字段,按照这个字段删除重复值,即提取这个字段下的不重复值数据,如果需要多字段同时考虑重复,可以同时选中多字段再执行操作,如下图所示:


完成多工作簿不重复值的提取后,可以按某一个规则将记录排序,比如这里是需要按照编号排序,如下图所示:


然后关闭并上载,如下图所示:


仅创建连接即可,方便后续将结果加载到任何位置,如下图所示:


最后打开你想展示结果的位置,加载之前在power query编辑器中整理完毕的数据,如下图所示:


注意这个结果是支持后期自动更新的,无论哪个Excel工作簿中的数据源变动,你都可以一键更新结果,操作如下图所示:


整个操作过程都无需输入任何代码,仅仅点击几下鼠标即可,虽然看起来上面的各种操作截图很多,但是整个操作过程不会超过2分钟,不必害怕麻烦。

虽然power query的方法很简单,但也并不是没有限制,它需要至少Excel 2010版本以上才可以使用,在Excel 2010和2013版本中可以安装power query插件,在Excel 2016及以上版本中power query就是内置功能了,可以直接调用。

需要新版安装包的同学可以进入公众号“LiRuiExcel”后台发送如下图红色数字,获取对应版本的安装包

可能还有同学会问,我用的是Excel 2007版本,甚至更低版本的Excel,难道就没有办法解决这类问题了吗?

当然不会,方法很多,我们可以根据情况灵活选择。

下面继续介绍一种任何Excel版本都支持的操作方法,由于之前写过的SQL教程极少人阅读和点赞,所以后来没有再写,今天重新提起来这种扩展性很强的方法:SQL查询法。

这次我们稍微变更一下业务目的,即要求从多个Excel工作簿文件中的B列提取出不重复的员工编号,支持后期的自动更新。

首先我们打开要放置结果的工作表,比如sheet1,调用数据选项卡的现有连接功能,操作如下图所示。


点击浏览更多按钮以后,选择当前文件所在位置,操作如下图所示。


选择表格后,单击确定,如下图所示。


注意此时不要直接导入数据,要点开属性按钮,操作如下图所示。


在连接属性设置中,点击定义按钮,在命令文本中输入sql代码,操作如下图所示。


这时需要根据实际排除重复的规则写sql代码,如果你仅需要每个工作簿中的B列提取不重复值,不删除多个工作簿合并以后的B列重复值,命令文本中的sql代码如下图所示。

从多文件多工作簿中动态提取出不重复值,一键更新结果\广州.xlsx].[员工表$]

为了方便同学们总结,这里给出通用代码结构:

[路径\工作簿3名称].[工作表名称$]

当然实际情况下按你的路径、文件名、工作表名填写即可,如果有更多文件需要合并,继续在后面连接即可,结构同前所示。

单击确定按钮以后,即可根据你的需要,从多个Excel工作簿文件中提取B列的不重复编号,如下图所示。


扩展需求说明及处理方案

上面的代码是应对多个工作簿内各自删除重复值的,如果工作簿1和工作簿2中包含同样的重复值,不会被删除,这点需要注意。

如果你需要的是无论多个Excel工作簿文件内,还是多文件之间出现重复一律删除,并且按编号排序,看下面的sql代码。

从多文件多工作簿中动态提取出不重复值,一键更新结果\广州.xlsx].[员工表$]order by 编号


和之前代码有两点区别:

1、将union all换成union,作用是合并后也提取不重复值;

2、增加order by 编号,作用是按编号升序排列。

总结一下这种通用代码结构:

这样即可保证最终结果中不会出现任何重复值,即使不同工作簿文件之间的不重复值也会被删除。

这种sql查询法得到的结果,也是同样支持后期自动更新的,一键刷新的位置同样是在数据选项卡下的点击全部刷新。

因为结果报表是根据sql查询代码生成的,所以当工作要求变更时,如何快速更新代码呢?是不是要从头选择数据连接位置、选择文件位置、重写代码呢?

当然不必那么麻烦了,只要第一次写好了代码,后续仅需在结果表中编辑查询就可以修改sql代码了,操作如下图所示。


所以这种方法也算是一劳永逸的帮我们解决问题,而且方便后期的更新,而且还没有Excel版本的任何限制,适用于所有情况。

当然,我们也不好武断的断言,某某方法就是最好的,无论什么时候,建议大家都要根据实际情况,考虑需要处理的问题场景、数据源结构和后期更新要求,以及结合自己所掌握的技术和自身习惯等因素,选择最适合的方法。

其实到哪都是这句话,永远不变的就是一直在变,万能的永远不会是表格,而是操作表格的人,希望每个人都根据需要汲取到适合自己的营养。

更多经典的实战技能,已整理成超清视频的系统课程,方便你系统提升。


(点击图片可放大查看)

今天就先到这里吧,希望这篇文章能帮到你!更多干货文章加下方小助手查看。

欢迎点个在看,分享转发到朋友圈

干货教程 · 信息分享

欢迎扫码↓添加小助手进朋友圈查看

(点击蓝字可直接跳转)

进知识店铺>>更多精品课程

更多的Excel实战技术,我已经整理到Excel特训营中以超清视频演示并同步讲解,不但有具体场景,还讲解思路和方法,更有配套的课件下载和社群互动。

想系统学习的同学长按下图识别二维码。

按上图↑识别二维码,查看详情

请把这个公众号推荐给你的朋友:)

关注微信公众号(ExcelLiRui),每天有干货

关注后置顶公众号设为星标

再也不用担心收不到干货文章了

关注后每天都可以收到Excel干货教程

请把这个公众号推荐给你的朋友

↓↓↓点击“阅读原文”进知识店铺

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

}

经常被人问到怎么对两份Excel数据进行比对,提问的往往都很笼统;在工作中,有时候会需要对两份内容相近的数据记录清单进行比对,需求不同,比对的的目标和要求也会有所不同。下面Office办公助手()的小编根据几个常见的应用环境介绍一下Excel表格中数据比对和查找的技巧。

应用案例一:比对取出两表的交集(相同部分)

Sheet1中包含了一份数据清单A,sheet2中包含了一份数据清单B,要取得两份清单共有的数据记录(交集),也就是要找到两份清单中的相同部分。

高级筛选是处理重复数据的利器。

选中第一份数据清单所在的数据区域,在功能区上依次单击【数据】——【高级】(2003版本中菜单操作为【数据】——【筛选】——【高级筛选】),出现【高级筛选】对话框。

在对话框中,筛选【方式】可以根据需求选取,例如这里选择“将筛选结果复制到其他位置”;【列表区域】就是之前所选中的第一份数据清单A所在的单元格区域;【条件区域】则选取另外那份清单B所在的单元格区域。如下图所示:

点击【确定】按钮后,就可以直接得到两份清单的交集部分,效果如下图。其中两个清单中虽然都有【西瓜】和【菠萝】,但是由于数量不一致,所以没有作为相同记录被提取出来。

这个操作的原理,就是利用了高级筛选功能对于匹配指定条件的记录进行筛选的功能,把两张表中的任意一张作为条件区域,在另外一张表中就能筛选出与之相匹配的记录,忽略掉其他不相关的记录。

需要注意的是,使用高级筛选的时候务必注意两个清单的标题行要保持一致(高级筛选中作为条件区域的前提),并且在选取【列表区域】和【条件区域】的时候都要把标题行的范围包含在其中。

使用公式进行比对的方法有很多,如果是单列数据对比比较常用的函数是,如果是多列数据记录对比,比较胜任。

在其中一张清单的旁边输入公式:

并向下复制填充。其中的Sheet2!A$1:A$13和Sheet2!B$2:B$13是另一张清单中的两列数据区域,需要根据实际情况修改。公式结果等于1的记录就是两个清单的交集部分,如下图所示:

应用案例二:取出两表的差异记录

要在某一张表里取出与另一张表的差异记录,就是未在另外那张清单里面出现的部分,其原理和操作都和上面第一种场景的差不多,所不同的只是筛选后所选取的集合正好互补。

先将两个清单的标题行更改使之保持一致,然后选中第一份数据清单所在的数据区域,在功能区上依次单击【数据】——【高级】,出现【高级筛选】对话框。在对话框中,筛选方式选择“在原有区域显示筛选结果”;【列表区域】和【条件区域】的选取和前面场景1完全相同,如下图所示:

点击【确定】完成筛选,将筛选出来的记录全部选中按【Del】键删除(或做标记),然后点击【清除】按钮(2003版本中为【全部显示】按钮)就可以恢复筛选前的状态得到最终的结果,如下图所示:

使用公式的话,方法和场景1完全相同,只是最后需要提取的是公式结果等于0的记录。

应用案例三:取出关键字相同但数据有差异的记录

前面的两份清单中,【西瓜】和【菠萝】的货品名称虽然一致,但在两张表上的数量却不相同,在一些数据核对的场景下,就需要把这样的记录提取出来。

高级筛选当中可以使用特殊的公式,使得高级筛选的功能更加强大。

第一张清单所在的sheet里面,把D1单元格留空,在D2单元格内输入公式:

然后在功能区上依次单击【数据】——【高级】,出现【高级筛选】对话框。在对话框中,筛选方式选择“在原有区域显示筛选结果”;【列表区域】选取第一张清单中的完整数据区域,【条件区域】则选取刚刚特别设计过的D1:D2单元格区域,如下图所示:

点击【确定】按钮以后,就可以得到筛选结果,就是第一张中货品名称与第二张表相同但数量却不一致的记录清单,如下图所示:

同样的,照此方法在第二张清单当中操作,也可以在第二张清单中找到其中与第一张清单数据有差异的记录。

这个方法是利用了高级筛选中可以通过自定义公式来添加筛选条件的功能,有关高级筛选中使用公式作为条件区域的用法,可参考本站发布的;另外一篇教程:

Excel中数据库函数和高级筛选条件区域设置方法详解

使用公式还是可以利用前面用到的SUMPRODUCT函数,在其中一张清单的旁边输入公式:

并向下复制填充。公式中的包含了两个条件,第一个条件是A列数据相同,第二个条件是B列数据不相同。公式结果等于1的记录就是两个清单中数据有差异的记录,如下图所示。这个例子中也可以使用更为人熟知的来进行匹配查询,但是VLOOKUP只适合单列数据的匹配,如果目标清单中包含了更多字段数据的差异对比,还是的扩展性更强一些。

}

我要回帖

更多关于 一列中提取不同数据 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信