Table of contents
本教程探讨了如何通过使用UNIQUE函数和动态数组来获得Excel中的唯一值。 你将学习一个简单的公式来寻找一列或一行中的唯一值、多列中的唯一值、基于条件的唯一值,以及更多。
在以前的Excel版本中,提取列表中的唯一值是一个艰难的挑战。 我们有一篇专门的文章,介绍了如何找到只出现一次的唯一值,提取列表中的所有不同项目,忽略空白等等。 每个任务都需要综合使用几个函数和一个多行数组公式,只有Excel大师才能完全理解。
Excel 365中引入的UNIQUE函数改变了一切!过去的火箭科学变得像ABC一样简单。 现在,你不需要成为一个公式专家,就可以根据一个或多个标准从一个范围内获得独特的值,并按字母顺序排列结果。 所有这些都是通过简单的公式完成的,每个人都可以阅读并根据自己的需要调整。
Excel UNIQUE函数
Excel中的UNIQUE函数从一个范围或数组中返回一个唯一值列表。 它适用于任何数据类型:文本、数字、日期、时间等。
该函数被归入动态数组函数中。 其结果是一个动态数组,自动垂直或水平地溢出到邻近的单元格。
Excel UNIQUE函数的语法如下。
UNIQUE(array, [by_col], [exact_once])在哪里?
阵列 (required) - 用于返回唯一值的范围或数组。
作者:col (可选) - 一个表示如何比较数据的逻辑值。
- TRUE - 跨列比较数据。
- FALSE或省略(默认)--跨行比较数据。
确切地说_一次 (可选) - 一个逻辑值,定义了哪些值被认为是唯一的。
- TRUE - 返回只出现一次的值,这就是数据库的唯一概念。
- FALSE或省略(默认)--返回范围或数组中所有不同的(不同的)值。
注意:目前UNIQUE函数只在Excel for Microsoft 365和Excel 2021中可用,Excel 2019、2016和更早的版本不支持动态数组公式,所以UNIQUE函数在这些版本中不可用。
Excel中的基本UNIQUE公式
下面是一个最简单的Excel唯一值公式。
我们的目标是从B2:B10范围内提取一个唯一的名字列表。 为此,我们在D2中输入以下公式。
=unique(b2:b10)
请注意,第2个和第3个参数被省略了,因为默认值在我们的案例中工作得很完美--我们正在将行与行之间进行比较,并希望返回范围内所有不同的名字。
当你按下回车键完成公式时,Excel将在D2中输出第一个找到的名字,将其他的名字洒在下面的单元格中。 结果,你在一列中拥有所有的唯一值。
如果你的数据跨越了从B2到I2的列,将第二个参数设置为 "true",以便将这些列相互比较。
=unique(b2:i2,true)
在B4中输入上述公式,按回车键 ,结果将水平溢出到右边的单元格中。 因此,你将得到一行中的唯一值。
提示:要在多列数组中找到唯一的值,并在一列或一行中返回,请将UNIQUE与TOCOL或TOROW函数一起使用,如以下例子所示。
- 从一个多列范围中提取唯一的值到一个列中
- 从一个多列的范围内拉出唯一的值到一个行中
Excel UNIQUE函数--技巧和注意事项
UNIQUE是一个新的函数,和其他动态数组函数一样,有一些你应该注意的特殊性。
- 如果UNIQUE返回的数组是最终结果(即没有传递给另一个函数),Excel会动态地创建一个适当大小的范围,并将结果填充到其中。 该公式只需要在 一个细胞 重要的是,在你输入公式的单元格下面和/或右边要有足够的空单元格,否则会出现#SPILL错误。
- 结果 自动更新 当源数据发生变化时,新增加的条目不会被包括在公式中,除非你改变了 阵列 如果你想要 阵列 以自动响应源范围的大小调整,然后将该范围转换为Excel表格并使用结构化引用,或创建一个动态命名的范围。
- 不同Excel文件之间的动态数组只在以下情况下工作 两个工作簿都已打开 如果源工作簿被关闭,链接的UNIQUE公式将返回一个#REF!错误。
- 和其他动态数组函数一样,UNIQUE只能在一个正常的 范围 当放在Excel表格内时,它返回一个#SPILL!错误。
如何在Excel中寻找唯一值--公式示例
下面的例子显示了UNIQUE函数在Excel中的一些实际用途。 主要思想是根据你的观点,以最简单的方式提取唯一值或删除重复值。
提取只出现一次的唯一值
要获得一个在指定范围内出现过一次的值的列表,将UNIQUE的第3个参数设置为TRUE。
例如,要拉出一次获奖名单上的名字,使用这个公式。
=unique(b2:b10,,true)
其中B2:B10是源范围,第二个参数( by_col )是假的或省略的,因为我们的数据是以行为单位组织的。
寻找出现一次以上的不同值
如果你追求的是一个相反的目标,即希望得到一个在给定范围内出现一次以上的值的列表,那么可以将UNIQUE函数与FILTER和COUNTIF一起使用。
UNIQUE(FILTER( 范围 , COUNTIF( 范围 , 范围 )>1))例如,要提取在B2:B10中出现一次以上的不同名称,你可以使用这个公式。
=UNIQUE(FILTER(B2:B10, COUNTIF(B2:B10, B2:B10)>1))
这个公式如何运作。
在公式的核心部分,FILTER函数根据COUNTIF函数返回的出现次数过滤掉重复的条目。 在我们的例子中,COUNTIF的结果是这个数组的计数。
{4;1;3;4;4;1;3;4;3}
比较操作(>1)将上述数组改为TRUE和FALSE值,其中TRUE代表出现一次以上的项目。
{真;假;真;真;假;真;真;真}。
这个数组被交给FILTER作为 包括 参数,告诉函数哪些值要包含在结果数组中。
{"安德鲁";"大卫";"安德鲁";"安德鲁";"大卫";"安德鲁";"大卫"}。
正如你所注意到的,只有与 "真 "相对应的值才能存活。
上面的数组到了 阵列 参数为UNIQUE,在去除重复的部分后,输出最终结果。
{"安德鲁"; "大卫"}
提示:以类似的方式,你可以过滤出现两次以上(>2)、三次以上(>3)的唯一值,等等。
查找多列中的唯一值(唯一行)。
当你想比较两个或更多的列并返回它们之间的唯一值时,请将所有目标列包含在 阵列 争论。
例如,为了返回获奖者唯一的名字(A列)和姓氏(B列),我们在E2中输入这个公式。
=unique(a2:b10)
按回车键会产生以下结果。
为了获得 唯一的行 即在A、B和C列中具有唯一价值组合的条目,这就是要使用的公式。
=unique(a2:c10)
惊人的简单,不是吗?)
获取按字母顺序排序的唯一值列表
你通常如何在Excel中按字母顺序排列? 对,通过使用内置的排序或过滤功能。 问题是,每次你的源数据发生变化时,你都需要重新排序,因为与Excel公式不同,公式会随着工作表中的每一个变化而自动重新计算,这些功能必须手动重新应用。
随着动态数组函数的引入,这个问题已经不存在了!你需要做的是简单地将SORT函数围绕一个常规的UNIQUE公式进行扭曲,像这样。
SORT(UNIQUE(array))例如,要提取列A到C中的唯一值,并将结果从A到Z排列,使用这个公式。
=sort(unique(a2:c10))
与上面的例子相比,输出结果更容易被感知和处理。 例如,我们可以清楚地看到,安德鲁和大卫在两个不同的运动中都是赢家。
提示:在这个例子中,我们将第一列中的数值从A到Z进行排序。 排序_index 和 排序_顺序 如果你想按其他列或不同的顺序(从Z到A或从大到小)对结果进行排序,请按照SORT函数教程中的解释设置第2和第3个参数。
查找多列中的唯一值并串联到一个单元格中
当在多列中搜索时,默认情况下,Excel的UNIQUE函数会在一个单独的单元格中输出每个值。 也许,你会发现把结果放在一个单元格中更方便?
为了实现这一点,不要引用整个范围,而是使用安培号(&)将各列连接起来,并在中间加上所需的分隔符。
作为一个例子,我们将A2:A10中的名字和B2:B10中的姓氏串联起来,用一个空格字符("")来分隔这些值。
=UNIQUE(A2:A10&" "&B2:B10)
结果是,我们在一栏里有一个全名的列表。
根据标准获得一个唯一值的列表
要提取有条件的唯一值,请同时使用Excel的UNIQUE和FILTER函数。
- FILTER函数只将数据限制在符合条件的数值上。
- UNIQUE函数从过滤的列表中删除重复的内容。
下面是过滤后的唯一值公式的通用版本。
UNIQUE(FILTER(array, 标准_范围 标准 ))在这个例子中,让我们得到一个特定运动的获胜者名单。 首先,我们在某个单元格中输入感兴趣的运动,例如F1。 然后,使用下面的公式得到唯一的名字。
=unique(filter(a2:b10, c2:c10=f1))
其中A2:B10是搜索唯一值的范围,C2:C10是检查标准的范围。
根据多个标准过滤唯一值
要用两个或更多的条件来过滤唯一的值,使用像下面所示的表达式来构建FILTER函数所需的条件。
UNIQUE(FILTER(array, ( 标准_范围1 标准1 ) * ( 标准_范围2 标准2 )))公式的结果是所有指定条件为 "真 "的唯一条目列表。 在Excel中,这被称为AND逻辑。
为了看到这个公式的作用,让我们得到一个G1(标准1)和G2(标准2)年龄以下的运动的唯一赢家名单。
来源范围为A2:B10,运动范围为C2:C10(标准范围1),年龄范围为D2:D10(标准范围2),该公式为以下形式。
=unique(filter(a2:b10, (c2:c10=g1) * (d2:d10)
并准确返回我们正在寻找的结果。
这个公式如何运作。
下面是对该公式逻辑的高级解释。
在 包括 在FILTER函数的参数中,你提供了两个或多个范围/标准对。 每个逻辑表达式的结果是一个TRUE和FALSE值的数组。 数组的乘法将逻辑值胁迫为数字,并产生一个1和0的数组。 由于乘以0总是得到0,只有满足所有条件的条目在最后的数组中有1。 FILTER函数过滤掉对应于0的项目,并将结果交给UNIQUE。
欲了解更多信息,请参见使用AND逻辑的多条件FILTER。
用多个OR标准过滤唯一值
要获得基于多个OR标准的唯一值列表,即当这个或那个标准为TRUE时,将逻辑表达式相加而不是相乘。
UNIQUE(FILTER(array, ( 标准_范围1 标准1 ) + ( 标准_范围2 标准2 )))例如,要显示在以下两种情况下的获奖者 足球 或 曲棍球 ,你可以使用这个公式。
=UNIQUE(FILTER(A2:B10, (C2:C10="Soccer") + (C2:C10="Hockey"))
如果需要,你当然可以在不同的单元格中输入标准,并像下面所示那样参考这些单元格。
=unique(filter(a2:b10, (c2:c10=g1) + (c2:c10=g2))
这个公式如何运作。
就像测试多个AND条件时一样,你把几个逻辑表达式放在 包括 当这些数组被加起来时,一个或多个条件为 "true "的项目将为1,而所有条件为 "false "的项目将为0。
欲了解更多信息,请参见使用OR逻辑的多条件的FILTER。
在Excel中获取唯一值,忽略空白
如果你正在处理一个包含一些空白的数据集,用常规公式得到的唯一列表很可能有一个空单元格和/或零值。 发生这种情况是因为Excel UNIQUE函数被设计为返回一个范围内的所有独特的值,包括空白。 因此,如果你的源范围有零和空白单元格,唯一列表将包含两个零,一个代表一个空白此外,如果源数据包含由某些公式返回的空字符串,uique列表也将包括一个空字符串(""),在视觉上看起来像一个空白单元。
为了得到一个没有空白的唯一值的列表,你需要这样做。
- 通过使用FILTER函数过滤掉空白单元格和空字符串。
- 利用UNIQUE函数将结果限制在唯一值上。
在一个通用的形式中,该公式看起来如下。
UNIQUE(FILTER( 范围 , 范围 ""))在这个例子中,D2中的公式是。
=unique(filter(b2:b12, b2:b12""))
结果是,Excel返回一个没有空单元格的唯一名称列表。
注意:如果原始数据包含 零点 ,一个零值将被包括在唯一列表中。
查找特定列中的唯一值
有时,你可能想从两个或多个互不相邻的列中提取唯一的值。 有时,你也可能想在结果列表中重新排序。 这两项任务都可以在CHOOSE函数的帮助下完成。
unique(choice({1,2,...}, 范围1 , 范围2 ))从我们的示例表中,假设你希望根据A列和C列中的数值得到一个获胜者名单,并按以下顺序排列结果:首先是一项运动(C列),然后是运动员的名字(A列)。
=unique(choice({1,2}, c2:c10, a2:a10))
并得到以下结果。
这个公式如何运作。
CHOOSE函数从指定的列中返回一个二维数组的值。 在我们的例子中,它还交换了列的顺序。
{"篮球", "安德鲁"; "篮球", "贝蒂"; "排球", "大卫"; "篮球", "安德鲁"; "曲棍球", "安德鲁"; "足球", "罗伯特"; "排球", "大卫"; "曲棍球", "安德鲁"; "篮球", "大卫" }
从上述数组中,UNIQUE函数返回一个唯一记录的列表。
寻找唯一值并处理错误
我们在本教程中讨论的UNIQUE公式工作得非常完美......只要至少有一个值符合指定的标准。 如果公式没有找到任何东西,就会出现#CALC!错误。
为了防止这种情况发生,只需用IFERROR函数包住你的公式。
例如,如果没有找到符合标准的唯一值,你可以不显示,即一个空字符串("")。
=iferror(unique(filter(a2:b10, (c2:c10=g1) * (d2:d10)
或者你可以明确告知你的用户,没有找到任何结果。
=iferror(unique(filter(a2:b10, (c2:c10=g1) * (d2:d10)
Excel UNIQUE函数不工作
正如你所看到的,UNIQUE函数的出现使在Excel中寻找唯一值变得异常容易。 如果你的公式突然出现了错误,很可能是以下情况之一。
#NAME? 错误
如果你在不支持该功能的Excel版本中使用UNIQUE公式,就会出现这种情况。
目前,UNIQUE函数只在Excel 365和2021中可用。 如果你有不同的版本,你可以在这个教程中找到合适的解决方案:如何在Excel 2019、Excel 2016和更早的版本中获得唯一值。
在支持的版本中,#NAME? 错误表明函数的名称拼错了。
#SPILL错误
如果溢出区中的一个或多个单元格不是完全空白,则发生。
要修复错误,只需清除或删除非空的单元格。 要准确地看到哪些单元格有障碍,点击错误指示器,然后点击 选择阻碍性细胞 更多信息,请参见#SPILL!Excel中的错误--原因和解决方法。
这就是在Excel中寻找唯一值的方法。 感谢你的阅读,希望下周能在我们的博客上见到你!
供下载的实践工作手册
Excel唯一值公式示例(.xlsx文件)。