Excel UNIQUE函数--寻找唯一值的最快方法

  • Share This
Michael Brown

本教程探讨了如何通过使用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文件)。

    Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.