经常使用Excel的同学,往往会遇到一个经典难题:多对多查询。需要根据多个查询条件,查出多个符合条件的结果。
来看一个多对多查询的例子。
六一儿童节当天,公司将给有小孩的同事放半天假陪孩子,但咨询部因工作性质,需除外。需要找出符合条件的员工姓名和所属部门,再邮件通知到个人。
1. 已有员工信息数据如下图:
公司员工信息列表
2. 要求的查询结果如下图:
要求查询结果图示
3. 传统的函数方式解决,需要用到数组公式。
(1). 公式方案1:使用Index+ROW函数,如下图:
公式方案1图示
(2). 公式方案2,结合365订阅版Excel支持的Filter函数,如下图:
公式方案2图示
公式方案总结:
即使是第二种相对较为简单的公式组合,也需要很好的Excel使用基础才可以看懂并复用到自己的应用场景中。
4. 将数据导入到数据库中,则只需要用到最基础的SQL语句。
【Ps. 以下案例演示均是在mysql数据库上实现】
(1). 导入表《部门人员信息》如下图:
部门人员信息表图示
(2). 查询的SQL和执行结果如下图:
SQL及执行结果图示
数据库方案总结:
相比于Excel中需要相当扎实的公式使用基础才可以实现复用,数据库则只需要最基础的SQL使用技能即可轻松独立解决多对多查询问题。
接下来看一个同时兼具数据量大和计算复杂两个特点的案例:
1. 已有数据如下图:
1.成绩数据表图示
2. 需求说明:
上图*有13万1393条数据,需要从这些数据中找出每个职位代码总成绩(两科合计+笔试成绩)排名前三的准考证号和成绩信息,并算出其对应的排名。
3. Excel公式方案问题分析:
公式方案图示
公式方案的思路是先算出每个职位每条数据的排名,然后筛选出所有排名<=3的数据行。公式复杂并不是最大的阻碍,因为这个表有13万多条数据,数组公式批量填充后,会卡住,无法计算出所有的结果,并可能会导致Excel应用程序的崩溃。
4. 数据库解决方案:
将数据导入数据库表中后,执行SQL如下图所示:
SQL及执行结果图示
如上图所示:数据库只用了不到1秒就查出了所有的结果。
Excel VBA编程+数据库实现一键获取结果
如果我们有一定的VBA编程基础,可以使用ADO编程,结合Excel的便捷、通用性和数据库强大的算力,在Excel中通过控件实现一键快速获取结果。
动态效果如下图:
ExcelVBA+数据库方案效果动态演示图
为避免篇幅太长引起的阅读困境,此处仅贴出部分主要代码:
在文章最后会贴上上文出现过的所有截图内容所在的源文件。
以上案例所用到的知识范围列表:
- Excel基础知识
- Excel VBA基础语法
- DAO访问数据库语法,这一点在第2条已经具备的条件下很容易实现,可以直接复用上述案例中的代码
- SQL使用技能
相关知识学习途径:
- Excel基础知识+VBA语法:《Excel零基础办公综合教程》
- SQL使用技能:《吴明数据分析系列之SQL篇》
案例素材文档下载
链接:
https://pan.baidu.com/s/1CYyMXFK7L4utvPVDLwdf7w
提取码:wmkt