在本指南中,我将向您展示如何在 Excel 中统计唯一值。我还会讲到一些特殊情况,例如如何处理大小写敏感,或如何基于一个或多个条件统计唯一值。
想持续精进 Excel 技能,欢迎加入我们的 Excel Fundamentals 技能路径,成为专家。
Excel 中的唯一值与不同值(Distinct)
这两个概念有时会被混淆,但“唯一值”和“不同值”并不是一回事。
不同值(Distinct) 指数据集中去重后的各个不同取值。例如,在列表 A, A, B, C, C, D 中,不同值为 A, B, C, D 。
唯一值 则是指在数据集中只出现一次的值。沿用同一示例,唯一值为 B 和 D (因为 A 和 C 出现了多次)。
在本文前半部分,我将专注于在 Excel 中统计唯一值的不同方法。但如果您其实是想统计不同值(Distinct),也没问题,稍后部分也有相关内容。
在 Excel 中统计唯一值的两种方法
在 Excel 中统计唯一值的常见方法有两种。
如何使用 UNIQUE() 函数统计唯一值
最简单的方法是结合使用 UNIQUE() 函数 和 COUNTA() 函数。UNIQUE() 用于从某个区域提取所有唯一值,而 COUNTA() 用于统计其中有多少唯一值。
COUNTA(UNIQUE(range, false, true))技术支持
例如,我在一个小型数据集上应用了下面的公式,它返回了唯一值的个数。
=COUNTA(UNIQUE(A2:A8, false, true))技术支持
如果改用这样的语法 =COUNTA(UNIQUE(A2:A8)),没有我们设置为 TRUE 的第三个参数,那么返回的将是“不同值”的个数,而不是“唯一值”。将第三个参数设为 TRUE 才会得到唯一值的计数。这两种情况都由 UNIQUE() 实现,刚开始可能会有些混淆。
如何用 SUM() 与 COUNTIF() 统计唯一值
如果您对 UNIQUE() 的细微差别还不太确定,或者您没有 Excel 365,也可以将 SUM() 与 IF() 和 COUNTIF() 组合来统计唯一值。
=SUM(IF(COUNTIF(range, range)=1,1,0))技术支持
例如,我的数据位于 A2:A8 区域,想统计唯一值的数量,于是写出以下公式:
SUM(IF(COUNTIF(A2:A8, A2:A8)=1,1,0))技术支持
这里 COUNTIF() 会遍历列表,检查每个名字出现的次数。若某个名字仅出现一次,则记为 1;若出现多次,则得到更大的数字。随后,IF() 将结果筛选为仅保留 1,其余都变为 0。最后,SUM() 把所有的 1 相加,得到唯一值的总数。
如何按数据类型统计唯一值
有时数据集包含混合数据类型,需要分别分析。起初看似麻烦,但在 Excel 中可以做到。下面介绍两种方法——一种用于统计唯一文本值,另一种用于统计唯一数字。
如何统计唯一文本值
若要统计唯一的文本值,可组合使用 ISTEXT()、COUNTIF() 和 SUM()。ISTEXT() 用于检测某值是否为文本,COUNTIF() 统计每个值出现的次数,SUM() 汇总唯一文本条目。
我在示例数据上应用了如下公式,立刻得出了唯一文本值的数量。
=SUM(IF(ISTEXT(A2:A9)*COUNTIF(A2:A9,A2:A9)=1,1,0))技术支持
如何统计唯一数值
如果您想统计唯一的数字而非文本,可使用相同公式,但将 ISTEXT() 换成 ISNUMBER()。
ISNUMBER() 只会考虑数值,而 COUNTIF() 与 SUM() 负责判定是否唯一。我在同一数据上稍作修改,即可仅统计唯一数值的数量:
=SUM(IF(ISNUMBER(A2:A9)*COUNTIF(A2:A9,A2:A9)=1,1,0))技术支持
如何在 Excel 中按条件统计唯一值
现在我们已掌握统计唯一值的基本方法,来看看一些进阶技巧。
如何基于条件统计唯一值
要基于特定条件统计唯一值,我使用如下语法:
=IFERROR(ROWS(UNIQUE(FILTER(range, criteria_range=criteria))), 0)技术支持
在这个公式中,FILTER() 按条件筛选区域,UNIQUE() 去重,ROWS() 计数,IFERROR() 则在未找到匹配时返回 Not Found ,以避免报错。
假设我有一份员工 及其部门 的列表,需要统计某部门有多少唯一员工。我将使用以下公式:
=IFERROR(ROWS(UNIQUE(FILTER(A2:A20, B2:B20=F1))), "Not Found")技术支持
其中,A2:A10 表示要筛选的员工姓名范围,B2:B10=F1 用于检查员工是否属于写在 F1 中的部门。
如何基于多列统计唯一行
如果我想统计某部门且薪资低于 50,000 美元的唯一员工数量,我会使用这个公式:
=IFERROR(ROWS(UNIQUE(FILTER(A2:A10, (B2:B10=F1) * (C2:C10>F2)))), "Not Found")技术支持
其中,A2:A10 表示员工姓名范围,B2:B10=F1 用于检查员工是否属于写在 F1 中的部门,而 C2:C10>F2 则用于检查薪资是否小于 F2 中给定的金额。
如何处理大小写敏感的唯一计数
默认情况下,Excel 对大小写敏感。例如, Apple 和 APPLE 被视为不同。为识别此类情况,我会创建一个辅助列,使用以下公式:
=IF(SUM((--EXACT($A$2:$A$11,A2)))=1,"Unique","Duplicate")技术支持
接着,为得到唯一值的数量,我这样使用 COUNTIF() 函数:
=COUNTIF(B2:B11,"Unique")技术支持
改为统计不同值(Distinct)的方法
最后一节,如果您确实是想统计 不同值(Distinct) ,我会展示几种方法。在此之前,先看一张表以直观比较差异:
Criteria Unique Values Distinct Values Definition Values that appear only once in a dataset. All different values in a dataset, including one occurrence of each duplicate. Duplicates included? No, duplicates are excluded. Yes, but only one instance of each value is kept. Example In [1, 2, 2, 3, 4], unique values are [1, 3, 4]. In [1, 2, 2, 3, 4], distinct values are [1, 2, 3, 4]. Use case Finds values that occur only once. Gets a list of all distinct values.
如何用 COUNTIF() 与 SUM() 统计不同值
在 Excel 中统计不同值,可以结合使用 COUNTIF() 与 SUM()。COUNTIF() 会检查每个值在给定区域中出现的次数,随后 SUM() 将 COUNTIF() 返回值按倒数求和,得到不同条目的总数。
=SUM(1/COUNTIF(range, range))技术支持
比如我想统计 A2:A8 区域中的不同值,我输入以下公式:
=SUM(1/COUNTIF(A2:A8, A2:A8))技术支持
其中,COUNTIF() 会检查列表中每个值出现的次数。
1/COUNTIF(A2:A8, A2:A8) 会将 1 除以每个值出现的次数。例如,某个数字出现两次,那么每个实例都变为 0.5(1/2);出现三次时则为 0.33(1/3)。
由于我们不需要这些分数,可以使用 SUM() 或 SUMPRODUCT() 将它们相加。每个重复项对应的分数相加为 1,而不同值保持为 1(1/1 = 1):
=SUMPRODUCT(1/COUNTIF(A2:A8, A2:A8))技术支持
如何用数据透视表统计不同值
Excel 2013 与 Excel 2016 在数据透视表中内置了“统计不同值”的功能。要使用它,先选择数据创建数据透视表:转到插入 并选择数据透视表 。弹出对话框——在其中选择现有工作表 ,并勾选将此数据添加到数据模型 。
接着,将所需列拖到值 区域。此处我将水果 列拖入,因为我想统计其不同值。然后在下拉菜单中点击值字段设置 。弹出窗口中选择不同计数 。您也可以为该列设置自定义名称(可选)。
如何用高级筛选统计不同值
如果您不想使用公式,可以改用高级筛选。
在本例中,我有一个数据集,想用高级筛选找出不同值。首先选择要查找的区域,然后转到数据 选项卡,点击高级 。
在高级筛选 对话框中,选择复制到其他位置 ,并在复制到 字段中输入希望列表出现的目标单元格。然后勾选选择不重复的记录 并点击确定 。
获得不同值列表后,我再用 ROWS() 函数计算这些值的数量:
=ROWS(D2:D5)技术支持
尽管下图中的选项写的是“选择不重复的记录”,它实际上提取的是不同值(Distinct)。
如何用 VBA 宏统计不同值
如果您需要反复统计不同值,可以使用 VBA(Visual Basic for Applications) ,一次编写代码,之后每次按名称调用函数即可自动完成。
使用方法:按 Alt + F11 ,在插入 选项卡下选择模块 。会新建一个模块,您可以将代码粘贴至此。
下面是我用于统计不同值的代码:
Function CountUnique(rng As Range) As Integer
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
Dim cell As Range
For Each cell In rng
If Not dict.exists(cell.Value) And cell.Value <> ""
Then,
dict.Add cell.Value, Nothing
End If
Next cell
CountUnique = dict.Count
End Function技术支持
然后按 Ctrl + S 保存,按 ALt + Q 关闭 VBA 编辑器。现在,您可以在工作表任意位置调用此自定义函数并指定要查找不同值的范围。我的函数名是 CountUnique(),每次用指定范围调用它时,都会返回计数值:
=CountUnique(A2:A8)技术支持
结语
本文介绍了用于统计唯一值与不同值的关键公式、数据透视表以及 VBA 宏。各方法各有优劣,您应根据自身需求与 Excel 版本进行选择。
若想进一步提升 Excel 技能,欢迎查看我们的 Excel Fundamentals 技能路径与 Data Preparation in Excel 课程。
在本指南中,我将向您展示如何在 Excel 中统计唯一值。我还会讲到一些特殊情况,例如如何处理大小写敏感,或如何基于一个或多个条件统计唯一值。
想持续精进 Excel 技能,欢迎加入我们的 Excel Fundamentals 技能路径,成为专家。
Excel 中的唯一值与不同值(Distinct)
这两个概念有时会被混淆,但“唯一值”和“不同值”并不是一回事。
在本文前半部分,我将专注于在 Excel 中统计唯一值的不同方法。但如果您其实是想统计不同值(Distinct),也没问题,稍后部分也有相关内容。
在 Excel 中统计唯一值的两种方法
在 Excel 中统计唯一值的常见方法有两种。
如何使用 UNIQUE() 函数统计唯一值
最简单的方法是结合使用 UNIQUE() 函数 和
COUNTA()函数。UNIQUE()用于从某个区域提取所有唯一值,而COUNTA()用于统计其中有多少唯一值。例如,我在一个小型数据集上应用了下面的公式,它返回了唯一值的个数。
如果改用这样的语法
=COUNTA(UNIQUE(A2:A8)),没有我们设置为TRUE的第三个参数,那么返回的将是“不同值”的个数,而不是“唯一值”。将第三个参数设为TRUE才会得到唯一值的计数。这两种情况都由UNIQUE()实现,刚开始可能会有些混淆。如何用 SUM() 与 COUNTIF() 统计唯一值
如果您对
UNIQUE()的细微差别还不太确定,或者您没有 Excel 365,也可以将SUM()与IF()和 COUNTIF() 组合来统计唯一值。例如,我的数据位于 A2:A8 区域,想统计唯一值的数量,于是写出以下公式:
这里
COUNTIF()会遍历列表,检查每个名字出现的次数。若某个名字仅出现一次,则记为 1;若出现多次,则得到更大的数字。随后,IF()将结果筛选为仅保留 1,其余都变为 0。最后,SUM()把所有的 1 相加,得到唯一值的总数。如何按数据类型统计唯一值
有时数据集包含混合数据类型,需要分别分析。起初看似麻烦,但在 Excel 中可以做到。下面介绍两种方法——一种用于统计唯一文本值,另一种用于统计唯一数字。
如何统计唯一文本值
若要统计唯一的文本值,可组合使用
ISTEXT()、COUNTIF()和SUM()。ISTEXT()用于检测某值是否为文本,COUNTIF()统计每个值出现的次数,SUM()汇总唯一文本条目。我在示例数据上应用了如下公式,立刻得出了唯一文本值的数量。
如何统计唯一数值
如果您想统计唯一的数字而非文本,可使用相同公式,但将
ISTEXT()换成ISNUMBER()。ISNUMBER()只会考虑数值,而COUNTIF()与SUM()负责判定是否唯一。我在同一数据上稍作修改,即可仅统计唯一数值的数量:如何在 Excel 中按条件统计唯一值
现在我们已掌握统计唯一值的基本方法,来看看一些进阶技巧。
如何基于条件统计唯一值
要基于特定条件统计唯一值,我使用如下语法:
在这个公式中,
FILTER()按条件筛选区域,UNIQUE()去重,ROWS()计数,IFERROR()则在未找到匹配时返回 Not Found,以避免报错。假设我有一份员工及其部门的列表,需要统计某部门有多少唯一员工。我将使用以下公式:
其中,
A2:A10表示要筛选的员工姓名范围,B2:B10=F1用于检查员工是否属于写在 F1 中的部门。如何基于多列统计唯一行
如果我想统计某部门且薪资低于 50,000 美元的唯一员工数量,我会使用这个公式:
其中,
A2:A10表示员工姓名范围,B2:B10=F1用于检查员工是否属于写在 F1 中的部门,而C2:C10>F2则用于检查薪资是否小于 F2 中给定的金额。如何处理大小写敏感的唯一计数
默认情况下,Excel 对大小写敏感。例如,Apple 和 APPLE 被视为不同。为识别此类情况,我会创建一个辅助列,使用以下公式:
接着,为得到唯一值的数量,我这样使用
COUNTIF()函数:改为统计不同值(Distinct)的方法
最后一节,如果您确实是想统计不同值(Distinct),我会展示几种方法。在此之前,先看一张表以直观比较差异:
[1, 2, 2, 3, 4], unique values are[1, 3, 4].[1, 2, 2, 3, 4], distinct values are[1, 2, 3, 4].如何用 COUNTIF() 与 SUM() 统计不同值
在 Excel 中统计不同值,可以结合使用
COUNTIF()与SUM()。COUNTIF()会检查每个值在给定区域中出现的次数,随后SUM()将COUNTIF()返回值按倒数求和,得到不同条目的总数。比如我想统计 A2:A8 区域中的不同值,我输入以下公式:
其中,
COUNTIF()会检查列表中每个值出现的次数。1/COUNTIF(A2:A8, A2:A8)会将 1 除以每个值出现的次数。例如,某个数字出现两次,那么每个实例都变为 0.5(1/2);出现三次时则为 0.33(1/3)。由于我们不需要这些分数,可以使用
SUM()或SUMPRODUCT()将它们相加。每个重复项对应的分数相加为 1,而不同值保持为 1(1/1 = 1):如何用数据透视表统计不同值
Excel 2013 与 Excel 2016 在数据透视表中内置了“统计不同值”的功能。要使用它,先选择数据创建数据透视表:转到插入并选择数据透视表。弹出对话框——在其中选择现有工作表,并勾选将此数据添加到数据模型。
接着,将所需列拖到值区域。此处我将水果列拖入,因为我想统计其不同值。然后在下拉菜单中点击值字段设置。弹出窗口中选择不同计数。您也可以为该列设置自定义名称(可选)。
如何用高级筛选统计不同值
如果您不想使用公式,可以改用高级筛选。
在本例中,我有一个数据集,想用高级筛选找出不同值。首先选择要查找的区域,然后转到数据选项卡,点击高级。
在高级筛选对话框中,选择复制到其他位置,并在复制到字段中输入希望列表出现的目标单元格。然后勾选选择不重复的记录并点击确定。
获得不同值列表后,我再用
ROWS()函数计算这些值的数量:尽管下图中的选项写的是“选择不重复的记录”,它实际上提取的是不同值(Distinct)。
如何用 VBA 宏统计不同值
如果您需要反复统计不同值,可以使用 VBA(Visual Basic for Applications),一次编写代码,之后每次按名称调用函数即可自动完成。
使用方法:按 Alt + F11,在插入选项卡下选择模块。会新建一个模块,您可以将代码粘贴至此。
下面是我用于统计不同值的代码:
然后按 Ctrl + S 保存,按 ALt + Q 关闭 VBA 编辑器。现在,您可以在工作表任意位置调用此自定义函数并指定要查找不同值的范围。我的函数名是
CountUnique(),每次用指定范围调用它时,都会返回计数值:结语
本文介绍了用于统计唯一值与不同值的关键公式、数据透视表以及 VBA 宏。各方法各有优劣,您应根据自身需求与 Excel 版本进行选择。
若想进一步提升 Excel 技能,欢迎查看我们的 Excel Fundamentals 技能路径与 Data Preparation in Excel 课程。