请求编写Excel公式:合并重复行并保留有效数据
Excel 去重并保留有效数据公式方案
场景说明
针对包含重复行的表格,按Name列去重后:
- 若同一
Name对应列的所有行数据一致,直接保留该值 - 若数据不一致,保留非空的有效数据(优先排除空值,选择有实际内容的数值/文本)
输入示例:
| Name | M1 | M2 |
|---|---|---|
| MO-118 | 0.8274% | 1.3 |
| MO-118 | 0.8274% | 1.3 |
| MO-26 | 0.0012% | 4.1 |
| MO-26 | 0 |
输出示例:
| Name | M1 | M2 |
|---|---|---|
| MO-118 | 0.8274% | 1.3 |
| MO-26 | 0.0012% | 4.1 |
方案1:Excel 365/2021(动态数组公式)
步骤1:提取唯一Name列表
在空白单元格(比如D2)输入公式,自动生成唯一的Name值:
=UNIQUE(A:A)
注:假设原Name列在A列,从A2开始有数据
步骤2:提取对应列的有效数据
针对M1列(原B列),在E2输入公式并回车(自动溢出填充):
=XLOOKUP(TRUE, NOT(ISBLANK(FILTER(B:B, A:A=D2))), FILTER(B:B, A:A=D2))
针对M2列(原C列),在F2输入公式:
=XLOOKUP(TRUE, NOT(ISBLANK(FILTER(C:C, A:A=D2))), FILTER(C:C, A:A=D2))
原理:用FILTER筛选出同一Name下的所有列数据,再用XLOOKUP定位第一个非空的有效数据;若所有数据一致,自然返回该值。
方案2:旧版Excel(无动态数组)
步骤1:提取唯一Name列表
在D2输入公式,下拉填充直到出现空白:
=INDEX(A:A, MATCH(0, COUNTIF(D$1:D1, A:A), 0))
输入后按Ctrl+Shift+Enter作为数组公式执行
步骤2:提取对应列的有效数据
M1列(E2)公式:
=INDEX(B:B, MAX(IF(A:A=D2, IF(B:B<>"", ROW(B:B), 0), 0)))
M2列(F2)公式:
=INDEX(C:C, MAX(IF(A:A=D2, IF(C:C<>"", ROW(C:C), 0), 0)))
输入后同样按Ctrl+Shift+Enter执行数组公式;原理是找到同一Name下非空数据的最大行号,提取对应单元格的值,优先保留非空有效数据
内容的提问来源于stack exchange,提问作者just
相关产品推荐
相关产品推荐

