如何按父行删除重复子行?COUNTIF公式失效问题求助
问题
需要针对每个父行删除其下的重复子行,尝试使用辅助单元格及COUNTIF公式=(COUNTIF($B$1:$B1,$B1)=1)+0,但该公式会误删其他父项中的重复子行,不符合需求。
当前数据集示例
| 层级 | 项目编号 |
|---|---|
| 0 | Parent-01 |
| 2 | Child-01 |
| 2 | Child-02 |
| 2 | Child-03 |
| 2 | Child-01 |
| 2 | Child-02 |
| 2 | Child-03 |
| 2 | Child-01 |
| 2 | Child-02 |
| 2 | Child-03 |
| 0 | Parent-02 |
| 2 | Child-01 |
| 2 | Child-02 |
| 2 | Child-03 |
预期输出
| 层级 | 项目编号 |
|---|---|
| 0 | Parent-01 |
| 2 | Child-01 |
| 2 | Child-02 |
| 2 | Child-03 |
| 0 | Parent-02 |
| 2 | Child-01 |
| 2 | Child-02 |
| 2 | Child-03 |
现有COUNTIF公式输出
| 层级 | 项目编号 | 计数 |
|---|---|---|
| 0 | Parent-01 | 1 |
| 2 | Child-01 | 1 |
| 2 | Child-02 | 1 |
| 2 | Child-03 | 1 |
| 2 | Child-01 | 0 |
| 2 | Child-02 | 0 |
| 2 | Child-03 | 0 |
| 2 | Child-01 | 0 |
| 2 | Child-02 | 0 |
| 2 | Child-03 | 0 |
| 0 | Parent-02 | 1 |
| 2 | Child-01 | 0 |
| 2 | Child-02 | 0 |
| 2 | Child-03 | 0 |
预期的COUNTIF输出
| 层级 | 项目编号 | 计数 |
|---|---|---|
| 0 | Parent-01 | 1 |
| 2 | Child-01 | 1 |
| 2 | Child-02 | 1 |
| 2 | Child-03 | 1 |
| 0 | Parent-02 | 1 |
| 2 | Child-01 | 1 |
| 2 | Child-02 | 1 |
| 2 | Child-03 | 1 |
解决方法
核心思路是先给每个子行标记所属的父组,再基于父组+子项的组合进行重复计数,避免跨父组的重复判断。
方法1:分步辅助列法(兼容所有Excel版本)
添加父组标记列(C列)
在C2单元格输入以下公式,下拉填充至所有行:=IF(A2=0,B2,C1)作用:父行(层级=0)用自身项目编号作为组名,子行继承上一行的组名,让同属一个父行的所有子行共享同一个组标记。
添加计数辅助列(D列)
在D2单元格输入以下公式,下拉填充:=(COUNTIFS($C$2:C2,C2,$B$2:B2,B2)=1)+0作用:用
COUNTIFS同时匹配当前组标记和子项编号,统计从表头到当前行的出现次数,第一次出现返回1,重复出现返回0,完全匹配预期的计数结果。筛选保留有效行
筛选D列中值为1的行,即可得到去重后的目标数据集。
方法2:动态数组一步法(仅Excel 365/2021及以上版本)
如果使用支持动态数组的Excel版本,可直接用以下公式生成去重后的结果(无需手动筛选):
=FILTER(A:B,(COUNTIFS(SCAN("",A:A,LAMBDA(x,y,IF(y=0,B:B,x))),SCAN("",A:A,LAMBDA(x,y,IF(y=0,B:B,x))),B:B,B:B,ROW(B:B),"<="&ROW(B:B))=1)+0)
公式说明:
SCAN函数动态生成每个行的父组标记;COUNTIFS基于父组+子项组合统计重复次数;FILTER直接筛选出计数为1的行。
内容的提问来源于stack exchange,提问作者Rohit Raichura
相关产品推荐
相关产品推荐

