如何编写跳过重复行的VSTACK函数实现多表合并与替换
函数方案:合并多表并替换指定ID行
Excel 动态数组方案(支持列对齐)
适用于Excel 365/2021+版本,可自动匹配列值(不受表的列顺序影响,只要列名一致),同时跳过Table1/Table2中与Edited表ID重复的行,改用Edited表对应行:
=LET( // 替换为你实际的结构化表名或单元格范围 T1, Table1, T2, Table2, Ed, Edited, // 以Edited表的列作为目标输出列 target_cols, Ed[#Headers], // 获取所有唯一ID集合 all_ids, UNIQUE(VSTACK(T1[ID], T2[ID], Ed[ID])), // 初始化结果数组 result, {}, // 遍历每个ID构建最终结果 final_result, REDUCE(result, all_ids, LAMBDA(acc, id, LET( // 判断当前ID是否存在于Edited表 in_ed, NOT(ISNA(XMATCH(id, Ed[ID]))), // 提取Edited表中该ID的行,按目标列匹配 ed_row, XLOOKUP(target_cols, Ed[#Headers], FILTER(Ed, Ed[ID]=id)), // 提取Table1中该ID的行,按目标列匹配(无则返回空) t1_rows, IFERROR(XLOOKUP(target_cols, T1[#Headers], FILTER(T1, T1[ID]=id)), ""), // 提取Table2中该ID的行,按目标列匹配(无则返回空) t2_rows, IFERROR(XLOOKUP(target_cols, T2[#Headers], FILTER(T2, T2[ID]=id)), ""), // 拼接非Edited表的行 non_ed_rows, VSTACK(t1_rows, t2_rows), // 累加结果:ID在Edited中则添加Edited行,否则添加Table1+Table2的行 IF(in_ed, VSTACK(acc, ed_row), VSTACK(acc, non_ed_rows)) ) )), // 添加表头并返回最终结果 VSTACK(target_cols, final_result) )
简化版(列顺序一致时使用)
如果三个表的列顺序完全一致,可使用更简洁的公式:
=VSTACK( FILTER(Table1, ISNA(XMATCH(Table1[ID], Edited[ID]))), FILTER(Table2, ISNA(XMATCH(Table2[ID], Edited[ID]))), Edited )
Google Sheets 方案
逻辑与Excel一致,仅调整函数适配Google Sheets环境:
=LET( T1, Table1, T2, Table2, Ed, Edited, // 假设表头在第一行,替换为实际表头范围 target_cols, Ed!1:1, all_ids, UNIQUE(VSTACK(T1[ID], T2[ID], Ed[ID])), result, {}, final_result, REDUCE(result, all_ids, LAMBDA(acc, id, LET( in_ed, NOT(ISNA(MATCH(id, Ed[ID], 0))), ed_row, XLOOKUP(target_cols, Ed!1:1, FILTER(Ed, Ed[ID]=id)), t1_rows, IFERROR(XLOOKUP(target_cols, T1!1:1, FILTER(T1, T1[ID]=id)), ""), t2_rows, IFERROR(XLOOKUP(target_cols, T2!1:1, FILTER(T2, T2[ID]=id)), ""), non_ed_rows, VSTACK(t1_rows, t2_rows), IF(in_ed, VSTACK(acc, ed_row), VSTACK(acc, non_ed_rows)) ) )), VSTACK(target_cols, final_result) )
关键注意事项
- ID格式一致性:确保三个表的ID列数据格式统一(比如均为文本格式),避免因格式差异导致匹配失败(例如数字ID和文本ID会被视为不同值)
- 重复ID处理:如果Table1和Table2存在相同ID且不在Edited表中,上述公式会保留两行;若需去重,可在
non_ed_rows处添加UNIQUE()函数 - 缺失列处理:如果某表缺少目标列,公式会返回空值,可根据需求修改
IFERROR的返回内容
内容的提问来源于stack exchange,提问作者Minouuuu
相关产品推荐
相关产品推荐

