Excel技术问询:找出共享2列的行并生成4列组合表
实现方法
针对你的需求,这里提供两种适合Excel新手的实现方案,分别用公式法(Excel 365及以上)和Power Query可视化操作法,两种方法都能自动完成匹配、合并和去重:
一、公式法(Excel 365/2021 适用)
假设原数据放在A1:C141(A1是表头,A2:C141为140行数据),步骤如下:
生成所有行对组合
在E2单元格输入以下动态数组公式,按回车后会自动生成所有不重复的行号对(避免同一组行重复匹配):=LET(rows,SEQUENCE(140,,2),combinations,ROWS(rows)*(ROWS(rows)-1)/2,E,FILTER(TOCOL(IF(rows<TOROW(rows),rows,"")),TOCOL(IF(rows<TOROW(rows),rows,""))<>""),F,FILTER(TOCOL(IF(rows<TOROW(rows),TOROW(rows),"")),TOCOL(IF(rows<TOROW(rows),TOROW(rows),""))<>""),HSTACK(E,F))公式执行后,E列是第一行的行号,F列是第二行的行号(确保E<F,避免重复组合)。
筛选共享2个成员的行对
在G2单元格输入公式,下拉到所有行对末尾:=SUMPRODUCT(--(COUNTIF(INDIRECT("A"&E2&":C"&E2), INDIRECT("A"&F2&":C"&F2))>0))=2这个公式会计算两行的成员交集数量,返回
TRUE的行对就是符合条件的。筛选G列为TRUE的行,保留这些行对。合并生成4人组并排序
在H2单元格输入动态数组公式,按回车后会自动生成排序后的4人组成员:=SORT(UNIQUE(VSTACK(INDIRECT("A"&E2&":C"&E2), INDIRECT("A"&F2&":C"&F2))))公式会自动把两行的6个成员去重、排序,生成4个成员的列表,并溢出到H-K列。
去重重复的4人组
选中H-K列的所有数据,复制到新区域,然后选中新区域的表头行,点击数据→移除重复项,勾选所有4列,确认后就能得到唯一的4人组表格。
二、Power Query可视化操作法(全版本Excel适用)
这个方法不需要写复杂公式,通过图形化操作完成,更适合纯新手:
导入数据到Power Query
- 选中原数据的任意单元格,点击数据→从表格/区域,勾选“我的表格有标题”,点击确定进入Power Query编辑器。
- 在编辑器中,点击添加列→索引列→从0开始,给每行添加一个索引编号。
生成所有不重复行对
- 点击主页→复制,复制当前查询,重命名为「行对组合」。
- 在「行对组合」查询中,点击合并查询→合并查询作为新查询:
- 左表选「行对组合」,右表选原查询(默认叫「表1」);
- 连接条件选择「索引」列,运算符选「大于」,合并类型选「左外部」;
- 点击确定,得到包含行对的合并表。
筛选符合条件的行对
- 点击合并列右侧的箭头,展开所有列,重命名为
Person1_2、Person2_2、Person3_2。 - 点击添加列→自定义列,输入公式:
命名为「交集数量」,然后点击筛选箭头→数字筛选→等于,输入= List.Count(List.Intersect({[Person1],[Person2],[Person3]}, {[Person1_2],[Person2_2],[Person3_2]}))2,保留筛选后的行。
- 点击合并列右侧的箭头,展开所有列,重命名为
生成排序后的4人组
- 点击添加列→自定义列,输入公式:
命名为「4人组」,然后筛选「4人组」列的长度为4(确保是刚好4个成员)。= List.Sort(List.Distinct({[Person1],[Person2],[Person3],[Person1_2],[Person2_2],[Person3_2]})) - 点击「4人组」列右侧的箭头→拆分到列→按分隔符,选「逗号」,点击确定,得到4列成员。
- 点击添加列→自定义列,输入公式:
去重并导出到Excel
- 选中拆分后的4列,点击转换→移除重复项。
- 点击主页→关闭并上载,选择上载到新工作表,就能得到最终的4人组表格。
内容的提问来源于stack exchange,提问作者cee




