在Microsoft 365 Excel同一工作簿内实现两个表的INNER JOIN操作
在Microsoft 365 Excel同一工作簿内实现两个表的INNER JOIN操作
嘿,我刚好处理过类似的需求,在Excel 365里实现内连接完全不需要引用外部文件,有两种很实用的方法,都是工作簿内原生操作,给你详细说说:
方法一:使用Power Query(推荐,适合批量/结构化数据)
这是最贴合数据库JOIN逻辑的方法,操作直观还能轻松刷新更新数据:
- 确认你的Table_A和Table_B都是正式Excel表(你已经命名好了,这点没问题)
- 打开数据选项卡,点击获取数据 > 自工作表/区域,选中Table_A后加载到Power Query编辑器
- 在编辑器里,点击主页选项卡的合并查询 > 合并查询作为新查询
- 在弹出的合并窗口中:
- 上方选Table_A,下方选Table_B
- 把两个表的
Field_A字段拖到一起作为匹配键(对应SQL里的ON条件) - 连接类型选择内连接(仅匹配行),然后点击确定
- 这时你会看到Table_B的列变成了带展开按钮的单元格,点击按钮后,只勾选你需要的
Field_B和Field_C(别选Field_A了,Table_A已经有这个字段),再点确定 - 调整列的顺序,把
Table_A.Field_A、Table_A.Field_B、Table_B.Field_B、Table_A.Field_C、Table_B.Field_C按你要的顺序排好 - 最后点击主页 > 关闭并上载,选择加载到Join工作表的空白位置,再把结果转换成正式表并命名为
Join就搞定了 - 后续源表数据更新时,只要在Join表上右键点击刷新,就能同步最新数据
方法二:使用XLOOKUP函数(适合喜欢用公式的场景)
如果习惯用公式实现实时同步,这种方法更灵活:
- 先在Join工作表手动建好表头:
Field_A、Table_A.Field_B、Table_B.Field_B、Table_A.Field_C、Table_B.Field_C - 在A2单元格输入公式:
=FILTER(Table_A[Field_A], COUNTIF(Table_B[Field_A], Table_A[Field_A])>0),这个公式会自动筛选出两个表中都存在的Field_A值(也就是内连接的匹配主键),下拉后会自动生成所有匹配行 - 接着在B2单元格输入:
=XLOOKUP(A2, Table_A[Field_A], Table_A[Field_B]),下拉填充获取Table_A的Field_B值 - C2单元格输入:
=XLOOKUP(A2, Table_B[Field_A], Table_B[Field_B]),下拉填充Table_B的Field_B值 - D2单元格输入:
=XLOOKUP(A2, Table_A[Field_A], Table_A[Field_C]),下拉填充Table_A的Field_C值 - E2单元格输入:
=XLOOKUP(A2, Table_B[Field_A], Table_B[Field_C]),下拉填充Table_B的Field_C值 - 最后选中整个数据区域(包括表头),按
Ctrl+T转换成正式表,命名为Join即可 - 这种方法的优势是源表数据变化时,Join表会自动实时更新,不需要手动刷新
备注:内容来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

