如何基于复合键合并两个Excel工作表并处理缺失键?
Excel两表全量匹配合并实现方案
数据背景
Sheet1数据
| LOC_NBR | CATEG_CODE | KEY_CODE | DATA_TXT | LOOK_UP_KEY_1 |
|---|---|---|---|---|
| 666 | FUNC | CHLLD | 0 | 666FUNCCHLLD |
| 1107 | FUNC | CHLLD | 1 | 1107FUNCCHLLD |
| 1111 | FUNC | CHLLD | 0 | 1111FUNCCHLLD |
| 1141 | FUNC | CHLLD | 0 | 1141FUNCCHLLD |
| 1151 | FUNC | CHLLD | 1 | 1151FUNCCHLLD |
| 1198 | FUNC | CHLLD | 1 | 1198FUNCCHLLD |
说明:LOOK_UP_KEY_1 是 LOC_NBR、CATEG_CODE、KEY_CODE 的拼接值。
Sheet2数据
| LOC_NBR | CATEG_CODE | KEY_CODE | DATA_TXT | LOOK_UP_KEY_2 |
|---|---|---|---|---|
| 666 | FUNC | CHLLD | 1 | 666FUNCCHLLD |
| 1107 | FUNC | CHLLD | 0 | 1107FUNCCHLLD |
| 1111 | FUNC | CHLLD | 0 | 1111FUNCCHLLD |
| 1141 | FUNC | CHLLD | 1 | 1141FUNCCHLLD |
| 1151 | FUNC | CHLLD | 1 | 1151FUNCCHLLD |
| 2007 | FUNC | CHLLD | 0 | 2007FUNCCHLLD |
说明:LOOK_UP_KEY_2 是 LOC_NBR、CATEG_CODE、KEY_CODE 的拼接值。
预期结果(Sheet3)
| LOOK_UP_KEY_1 | LOOK_UP_KEY_2 | DATA_TXT_1 | DATA_TXT_2 |
|---|---|---|---|
| 666FUNCCHLLD | 666FUNCCHLLD | 0 | 1 |
| 1107FUNCCHLLD | 1107FUNCCHLLD | 1 | 0 |
| 1111FUNCCHLLD | 1111FUNCCHLLD | 0 | 0 |
| 1141FUNCCHLLD | 1141FUNCCHLLD | 0 | 1 |
| 1151FUNCCHLLD | 1151FUNCCHLLD | 1 | 1 |
| 1198FUNCCHLLD | Not Present | 1 | NA |
| Not Present | 2007FUNCCHLLD | NA | 0 |
核心需求
- 基于
LOOK_UP_KEY_1和LOOK_UP_KEY_2实现两表的全量合并(包含两边独有的数据) - 键匹配时,同时显示两表的
DATA_TXT值 - Sheet1独有的键:Sheet2对应列显示
Not Present,DATA_TXT_2显示NA - Sheet2独有的键:Sheet1对应列显示
Not Present,DATA_TXT_1显示NA
实现方法
方法一:Power Query(推荐,适合大数量级数据)
这是高效稳定的方式,支持自动刷新:
- 导入数据到Power Query
- 选中Sheet1任意数据单元格,点击「数据」选项卡→「从表格/区域」,勾选「我的表格有标题」,确定进入编辑器
- 重复操作导入Sheet2的数据
- 整理列数据
- Sheet1查询中,保留
LOOK_UP_KEY_1和DATA_TXT列,删除其他列;右键DATA_TXT重命名为DATA_TXT_1 - Sheet2查询中,保留
LOOK_UP_KEY_2和DATA_TXT列,删除其他列;右键DATA_TXT重命名为DATA_TXT_2
- Sheet1查询中,保留
- 全外连接两表
- 回到Sheet1查询编辑器,点击「主页」→「合并查询」→「合并查询作为新查询」
- 合并设置:
- 上半部分选Sheet1查询,匹配列选
LOOK_UP_KEY_1 - 下半部分选Sheet2查询,匹配列选
LOOK_UP_KEY_2 - 连接种类选「全外部(所有行,两边匹配的行)」
- 上半部分选Sheet1查询,匹配列选
- 确定后,点击合并列右侧的展开按钮,只勾选
LOOK_UP_KEY_2和DATA_TXT_2,取消「使用原始列名作为前缀」,确定
- 处理空值
- 选中
LOOK_UP_KEY_1列,点击「转换」→「替换值」,空值替换为Not Present - 选中
LOOK_UP_KEY_2列,重复上述操作替换空值 - 分别选中
DATA_TXT_1和DATA_TXT_2列,将空值替换为NA
- 选中
- 加载结果到Sheet3
- 点击「主页」→「关闭并上载至」,选择「仅创建连接」,再指定加载到Sheet3的起始单元格,确定
方法二:函数公式法(适合小数量级数据)
数据量小时可手动用公式实现:
- 提取所有唯一键
- 在Sheet3的A列(辅助列),复制Sheet1的
LOOK_UP_KEY_1和Sheet2的LOOK_UP_KEY_2所有值 - 选中A列,点击「数据」→「删除重复值」,得到所有唯一匹配键
- 在Sheet3的A列(辅助列),复制Sheet1的
- 填充各列公式
- LOOK_UP_KEY_1列(Sheet3 B2):
=IFERROR(VLOOKUP(A2,Sheet1!$E:$E,1,FALSE),"Not Present"),下拉填充 - LOOK_UP_KEY_2列(Sheet3 C2):
=IFERROR(VLOOKUP(A2,Sheet2!$E:$E,1,FALSE),"Not Present"),下拉填充 - DATA_TXT_1列(Sheet3 D2):
=IFERROR(VLOOKUP(A2,Sheet1!$E:$D,2,FALSE),"NA"),下拉填充 - DATA_TXT_2列(Sheet3 E2):
=IFERROR(VLOOKUP(A2,Sheet2!$E:$D,2,FALSE),"NA"),下拉填充
- LOOK_UP_KEY_1列(Sheet3 B2):
- 隐藏辅助列:完成后隐藏Sheet3的A列即可
内容的提问来源于stack exchange,提问作者Nihal sharma
相关产品推荐
相关产品推荐

