绯村剑心
回答者
回答于 2026-10-24
在C2单元格输入以下公式,然后向下填充即可:
方法一:通用公式(适用于Excel 2010及以上版本)
=SUMPRODUCT((A$2:A$100=A2)*(B$2:B$100<>"")/COUNTIFS(A$2:A$100,A$2:A$100,B$2:B$100,B$2:B$100))
该公式的原理是:COUNTIFS对A列相同姓名且B列相同时间的记录进行计数,取倒数后通过SUMPRODUCT求和,从而实现按人员分组并对时间去重计数的效果。
方法二:动态数组公式(适用于Microsoft 365或Excel 2021及以上版本)
=ROWS(UNIQUE(FILTER(B$2:B$100, A$2:A$100=A2)))
此公式先用FILTER筛选出当前人员对应的所有时间,再用UNIQUE去除重复时间,最后用ROWS计算去重后的行数。
操作步骤:
- 假设数据从第2行开始,A列为人员姓名,B列为到访时间,C列用于显示结果。
- 在C2单元格输入上述任一公式。
- 根据实际数据行数调整公式中的范围(如将
A$100改为实际最大行号)。 - 选中C2单元格,向下拖动填充柄将公式应用到其他行。
判断依据:
- 去重的核心在于同时满足“A列值相同”且“B列值相同”才视为重复记录。
- 公式中使用绝对引用(
$符号)锁定数据区域,确保下拉填充时统计范围不变。
适用条件:
- 方法一兼容性广,但数据量极大(如数万行)时计算速度较慢。
- 方法二计算效率高、公式简洁,但仅限支持动态数组的新版Excel。
常见误区:
- 未排除空值:若B列存在空白单元格,可能导致计数异常。方法一中加入
B$2:B$100<>""条件可避免此问题;方法二中FILTER默认会保留空值,可视情况嵌套处理。 - 引用方式错误:数据区域的行列号必须使用绝对引用(如
A$2:A$100),而等号右侧的条件单元格应使用相对引用(如A2),否则下拉后结果全部相同。 - 整列引用导致性能下降:尽量避免使用
A:A这种整列引用,应指定具体的数据起止行号以提升运算效率。