多表连接,每个表结构、行列数都不一致,Excel 能行吗?
如何合并多个工作表?在表结构一致的情况下,可以用 indirect 函数,具体可参阅 Excel indirect 函数(3) – 多表合并不做计算。
但是如果每个工作表的结构完全不同,行列数也不一致,唯一的关联就是每个表中至少有一列数据可以跟其他任意一个表的某列对应上,那就需要利用这些关联的列,把所有表连接成一张总表。
如果用函数解决会非常繁琐,比如使用多次 vlookup。
如果会 SQL 的同学对这个需求肯定异常淡定,因为 SQL 中有专门用于表连接的的 join 语句。
那么 Excel 中是否有类似 join 这样的功能呢?如果不用 SQL,有其他简单的方法吗?
答案当然是有,而且完全不需要自己写语句,只要选择下拉选项就能实现。下拉菜单中的所有选项功能,其实就是仿照了 SQL 的几种 join 类型。
案例:
下图 1、2、3 的数据表分别在三个不同的工作簿中,请将这三张表连接成一张总表,并且将全年级的成绩由高到低排列,效果如下图 4 所示。
下图 5 是上面这段文字的总结。
解决方案:
这三个工作簿分别以如下名称存放在同一目录下,接下来我们就开始合并。
1. 新建并打开一个用于存放最终结果的“总表”文件 --> 选择菜单栏的“数据”-->“新建查询”-->“从文件”-->“从工作簿”
2. 从导航器中选择需要导入的文件 --> 选择数据表所在的工作表 --> 点击“加载”
3. 用相同的方式依次将三个数据表都导入到 Power Query 中。
总表中会出现三个新的工作表,其中分别是刚才导入的三个数据表。
双击右侧的“工作簿查询”区域的任何表格,进入 Power Query 编辑器。
4. 在 Power Query 中,点击左侧“查询”上方的箭头符号,展开导航窗格。
5. 选中 Sheet1 --> 选择菜单栏的“主页”-->“将第一行用作标题”
6. 选中 Sheet1 (2) --> 选择菜单栏的“主页”-->“将第一行用作标题”
7. 选中 Sheet1 --> 选择菜单栏的“主页”-->“合并查询”
8. 在弹出的对话框中进行如下设置 --> 点击“确定”:
选中 Sheet1 的“班级”列
从下拉菜单中选择 Sheet1 (2)
选中 Sheet1 (2) 的“班级”列
在“联接种类”中选择“完全外部(两者中的所有行)”
9. 点击 Sheet1 (2) 右边的展开按钮 --> 点击“确定”
10. 再次选择菜单栏的“主页”-->“合并查询”
11. 在弹出的对话框中进行如下设置 --> 点击“确定”:
选中“Sheet1 (2)姓名”列
从下拉菜单中选择 Sheet1 (3)
选中 Sheet1 (3) 的“姓名”列
在“联接种类”中选择“完全外部(两者中的所有行)”
12. 点击 Sheet1 (3) 右边的展开按钮 --> 点击“确定”
13. 删除重复的“班级”和“姓名”列
14. 重命名合并进来的两列名称
15. 选中“模拟考总分”列 --> 选择菜单栏的“主页”-->“降序”
16. 选择菜单栏的“主页”-->“关闭并上载”-->“关闭并上载”
大功告成。