=COUNTA(UNIQUE(A2:A9)) 统计 A2:A9 中有多少个不同的值。UNIQUE 把每个值返回一次,COUNTA 统计这个列表。它需要 Excel 2021 或 Microsoft 365;旧版本的做法见下文。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Customer | Unique list | Count | |
| 2 | Ana | Ana | 5 | |
| 3 | Ben | Ben | ||
| 4 | Ana | Cara | ||
| 5 | Cara | Dan | ||
| 6 | Ben | Eva | ||
| 7 | Dan | |||
| 8 | Ana | |||
| 9 | Eva |
八笔订单来自五位客户。C2 溢出显示 UNIQUE 得到的名字列表,让你看清统计的是什么;D2 则不需要把列表放在表格上就能直接计数。把 A9 改成 Ana,计数降为 4;输入一个新名字,计数就会增加。
UNIQUE 不区分大小写,所以 Ana 和 ana 算同一位客户。
在旧版 Excel 中统计不重复值
Excel 2019 及更早版本没有 UNIQUE。经典公式是:
=SUMPRODUCT(1/COUNTIF(A2:A9,A2:A9))
COUNTIF 用整个区域作为条件时,会为每一行返回该行的值出现了多少次。出现 3 次的名字在它的每一行都得到 3,于是 1/3 被加三次,这个名字加起来正好是 1。B 列显示每一行的次数,C 列显示对应的分数。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Customer | Times | 1/Times | Count | |
| 2 | Ana | 3 | 0.33 | 5 | |
| 3 | Ben | 2 | 0.50 | 5.00 | |
| 4 | Ana | 3 | 0.33 | ||
| 5 | Cara | 1 | 1.00 | ||
| 6 | Ben | 2 | 0.50 | ||
| 7 | Dan | 1 | 1.00 | ||
| 8 | Ana | 3 | 0.33 | ||
| 9 | Eva | 1 | 1.00 |
Ana 的三行各加 0.33,Ben 的两行各加 0.50,三个只出现一次的名字各加 1:总共是 5,与辅助列 SUM 的结果相同。在几万行的数据上,这个公式很慢,因为 COUNTIF 每一行都要扫描一遍整个区域;UNIQUE 没有这个开销。
去重计数与唯一值:只出现一次的值
“唯一”这个说法可以指两种不同的计数。上面那种统计的是去重后的值:每个名字算一次。另一种统计的是正好出现一次的值,例如只下过一次单的客户。UNIQUE 把第三个参数 exactly_once 设为 TRUE 就能做到。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Customer | Count | Result | |
| 2 | Ana | Distinct | 5 | |
| 3 | Ben | Exactly once | 3 | |
| 4 | Ana | Exactly once, older Excel | 3 | |
| 5 | Cara | |||
| 6 | Ben | |||
| 7 | Dan | |||
| 8 | Ana | |||
| 9 | Eva |
去重后有五位客户,但其中只有三位(Cara、Dan 和 Eva)只下过一次单。旧版 Excel 的写法统计 COUNTIF 正好为 1 的行。如果每个值都有重复,带 exactly_once 的 UNIQUE 会返回 #CALC!,COUNTA 会把这个错误算作 1;SUMPRODUCT 版本则返回 0。
按条件统计不重复值
要统计某个地区有多少位不同的客户,先筛选出这些行,再统计剩下的内容。FILTER 保留 North 行,UNIQUE 去掉重复项。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Customer | Region | Region | Customers | |
| 2 | Ana | North | North | 3 | |
| 3 | Ben | South | South | 3 | |
| 4 | Ana | North | North, older Excel | 3 | |
| 5 | Cara | North | |||
| 6 | Ben | North | |||
| 7 | Dan | South | |||
| 8 | Ana | North | |||
| 9 | Eva | South |
North 有五笔订单,来自三位客户:Ana、Cara 和 Ben。E3 用同样的方法统计 South。E4 是适用于 Excel 2019 及更早版本的写法:COUNTIFS 统计每个“客户和地区”组合,条件只保留 North 的分数。
如果没有任何行匹配,FILTER 返回 #CALC!,而 COUNTA 会把这个错误算作一个值:在 D2 中输入 West,E2 显示 1 而不是 0。用 IFERROR 包住公式也没用,因为 COUNTA 本身不返回错误。改为统计结果的行数,它会把错误传递出来:=IFERROR(ROWS(UNIQUE(FILTER(A2:A9,B2:B9="West"))),0) 返回 0。
统计不重复值并忽略空白
区域中的空单元格会多出一个“值”。UNIQUE 把它返回为 0,COUNTA 也会统计这个 0,所以对于 Ana、空单元格、Ben、Ana、空单元格、Cara 和 Ben,Excel 给出:
=COUNTA(UNIQUE(A2:A8)) 4 three names plus the 0 for the empty cells
在旧公式中,空行会让 COUNTIF 返回 0,于是 1/0 得到 #DIV/0!。先去掉空白:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Customer | Formula | Count | |
| 2 | Ana | Skip blanks | 3 | |
| 3 | Older Excel | 3 | ||
| 4 | Ben | |||
| 5 | Ana | |||
| 6 | ||||
| 7 | Cara | |||
| 8 | Ben |
两个公式都统计出三位客户。带 A2:A8<>"" 的 FILTER 在 UNIQUE 处理之前就去掉了空单元格。在旧公式中,A2:A8&"" 把每个空单元格变成空字符串,这样 COUNTIF 永远不会返回 0,而 (A2:A8<>"") 让这些行的权重为 0。
练习:统计产品种类
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Order | Product | Count | Result | |
| 2 | 1001 | Apple | Products | ||
| 3 | 1002 | Pear | |||
| 4 | 1003 | Apple | |||
| 5 | 1004 | Plum | |||
| 6 | 1005 | Pear | |||
| 7 | 1006 | Apple | |||
| 8 | 1007 | Plum | |||
| 9 | 1008 | Fig |
轮到你了: 统计 B2:B9 中出现了多少种不同的产品。在 E2 中写公式。
根据你的 Excel 版本选择公式
| 统计内容 | Excel 365 / 2021 | Excel 2019 及更早版本 |
|---|---|---|
| 去重后的值 | =COUNTA(UNIQUE(A2:A9)) | =SUMPRODUCT(1/COUNTIF(A2:A9,A2:A9)) |
| 只出现一次的值 | =COUNTA(UNIQUE(A2:A9,,TRUE)) | =SUMPRODUCT(--(COUNTIF(A2:A9,A2:A9)=1)) |
| 按条件去重计数 | =COUNTA(UNIQUE(FILTER(A2:A9,B2:B9="North"))) | =SUMPRODUCT((B2:B9="North")/COUNTIFS(A2:A9,A2:A9,B2:B9,B2:B9)) |
| 去重计数并跳过空白 | =COUNTA(UNIQUE(FILTER(A2:A9,A2:A9<>""))) | =SUMPRODUCT((A2:A9<>"")/COUNTIF(A2:A9,A2:A9&"")) |
在数据透视表中,值汇总方式“非重复计数”不用公式就能完成同样的工作,但前提是创建数据透视表时勾选了“将此数据添加到数据模型”。如果想删除重复项而不是统计它们,请参阅删除重复项。
常见问题
如何在 Excel 中统计不重复值?
在 Excel 365 或 2021 中,使用 =COUNTA(UNIQUE(A2:A9)):UNIQUE 把每个值列出一次,COUNTA 统计这个列表。在旧版本中使用 =SUMPRODUCT(1/COUNTIF(A2:A9,A2:A9))。
如何统计只出现一次的值?
把 UNIQUE 的第三个参数 exactly_once 设为 TRUE:=COUNTA(UNIQUE(A2:A9,,TRUE))。对于 Ana、Ana、Ben,结果是 1,因为只有 Ben 只出现了一次。在 Excel 2019 及更早版本中使用 =SUMPRODUCT(--(COUNTIF(A2:A9,A2:A9)=1))。
如何按条件统计不重复值?
先筛选,再计数:=COUNTA(UNIQUE(FILTER(A2:A9,B2:B9="North"))) 统计 North 行中不同客户的数量。如果没有任何行匹配,COUNTA 会把 FILTER 的 #CALC! 错误算作 1,所以可能出现这种情况时,请使用 =IFERROR(ROWS(UNIQUE(FILTER(A2:A9,B2:B9="North"))),0)。
如何统计不重复值并忽略空白单元格?
在 UNIQUE 之前去掉空白:=COUNTA(UNIQUE(FILTER(A2:A9,A2:A9<>"")))。在旧版 Excel 中,=SUMPRODUCT((A2:A9<>"")/COUNTIF(A2:A9,A2:A9&"")) 会跳过空白。