【问题标题】:Count unique values in a column in Excel在 Excel 中计算列中的唯一值
【发布时间】:2013-09-03 07:46:27
【问题描述】:

我有一个.xls 文件,其中有一列包含一些数据。如何计算包含此列的唯一值的数量?

我用谷歌搜索了很多选项,但他们在那里给出的公式总是给我错误。例如,

=INDEX(List, MATCH(MIN(IF(COUNTIF($B$1:B1, List)=0, 1, MAX((COUNTIF(List, "<"&List)+1)*2))*(COUNTIF(List, "<"&List)+1)), COUNTIF(List, "<"&List)+1, 0))

返回

【问题讨论】:

  • 你不能只使用数据透视表来回答吗?
  • 其实我不想保存答案。我只想检查有多少唯一值包含该列,因为这个文件稍后会导入MySQL,我想看看它是否正确导入。
  • 你能接受最高票数的答案吗?我觉得更好

标签: excel unique


【解决方案1】:

要计算 A2:A100 中不同值的数量(不计算空白):

=SUMPRODUCT((A2:A100&lt;&gt;"")/COUNTIF(A2:A100,A2:A100&amp;""))


从@Ulli Schmid 的答案复制到What is this COUNTIF() formula doing?

=SUMPRODUCT((A1:A100<>"")/COUNTIF(A1:A100,A1:A100&""))

计算 A1:A100 内的唯一单元格不包括空白单元格和带有空字符串 ("") 的单元格。

它是如何做到的?示例:

A1:A100 = [1, 1, 2, "apple", "peach", "apple", "", "", -, -, -, ...]
then:
A1:A100&"" = ["1", "1", "2", "apple", "peach", "apple", "", "", "", "", "", ...]

所以需要这个 &"" 将空白单元格 (-) 转换为空字符串 ("")。如果您要直接使用空白单元格进行计数,则 COUNTIF() 返回 0。使用此技巧,“”和 - 都被视为相同:

COUNTIF(A1:A100,A1:A100) = [2, 2, 1, 2, 1, 2, 94, 94, 0, 0, 0, ...]
but:
COUNTIF(A1:A100,A1:A100&"") = [2, 2, 1, 2, 1, 2, 94, 94, 94, 94, 94, ...]

如果我们现在想要获取所有唯一单元格的计数,不包括空格和“”,我们可以除法

(A1:A100<>""), which is [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, ...]

通过我们的中间结果 COUNTIF(A1:A100,A1:A100&""),并对这些值求和。

SUMPRODUCT((A1:A100<>"")/COUNTIF(A1:A100,A1:A100&""))  
= (1/2 + 1/2 + 1/1 + 1/2 + 1/1 + 1/2 + 0/94 + 0/94 + 0/94 + 0/94 + 0/94 + ...)
= 4

如果我们使用 COUNTIF(A1:A100,A1:A100) 而不是 COUNTIF(A1:A100,A1:A100&amp;""),那么其中一些 0/94 将是 0/0。由于不允许除以零,我们会抛出错误。

【讨论】:

  • 注意:我再次编辑了 - 分隔符由区域设置决定,所以逗号在英国适用(在美国也适用)但是 ;可能适用于其他地方,例如欧洲大陆
  • 这应该是“更好”的答案。如果它被标记为这样就好了。
  • 工作正常,但该死的会减慢一张纸神圣的废话
  • 原来我试图检查整个列,这大大减慢了过程,以至于需要 1 秒的宏需要 10 分钟。在检查客户要求后,最大行数为 156,因此我将查询设置为在 1 到 250 之间进行检查。完美运行。谢谢胡迪尼 ;)
【解决方案2】:

试试 - =SUM(IF(FREQUENCY(MATCH(COLUMNRANGE,COLUMNRANGE,0),MATCH(COLUMNRANGE,COLUMNRANGE,0))&gt;0,1))

其中 COLUMNRANGE = 您拥有这些值的范围。

例如- =SUM(IF(FREQUENCY(MATCH(C12:C26,C12:C26,0),MATCH(C12:C26,C12:C26,0))&gt;0,1))

按 Ctrl+Shift+Enter 使公式成为数组(否则将无法正确计算)

【讨论】:

  • 出于某种原因,这对我不起作用。我的区域设置要求我应该使用';'作为参数分隔符和“。”作为小数分隔符,但它仍然无法正常工作。我正在使用 Excel 2013...也许 API 已更改?
  • 为我工作。我使用的是 Excel 2013。我也不需要将公式设为数组即可。
【解决方案3】:

这是获取唯一值计数以及获取唯一值的另一种快速方法。将您关心的列复制到另一个工作表中,然后选择整个列。单击数据-> 删除重复项-> 确定。这会删除所有重复的值。

【讨论】:

  • 这个获得了“普通人最有可能使用的方法”奖。 :)
  • 对我来说,这比 barry houdini 的 answer 快得多,大约100 万行。
【解决方案4】:

这是一个优雅的数组公式(我在这里找到了http://www.excel-easy.com/examples/count-unique-values.html),它可以很好地解决问题:

类型

=SUM(1/COUNTIF(List,List))

并使用 CTRL-SHIFT-ENTER 确认

【讨论】:

  • 这是我见过的最优雅的,但像所有其他人一样不进行精确的字符串匹配。
  • 我喜欢这个公式背后的扭曲思维。
  • 在短名单上效果很好。长的窒息。我有一个 42000 行列表,它已经计算了 5 分钟以上,但还没有完成。 200 行,难以察觉的滞后。 42000,等待,等待,等待...可能是时候将其移至数据库或某个统计应用程序了。
【解决方案5】:

计数唯一的条件。 Col A 是 ID,使用条件 ID=32,Col B 是名称,我们正在尝试计算特定 ID 的唯一名称

=SUMPRODUCT((B2:B12<>"")*(A2:A12=32)/COUNTIF(B2:B12,B2:B12))

【讨论】:

    【解决方案6】:

    我刚刚想到的另一种棘手的方法(经过测试并且有效!)。

    • 选择列中的数据
    • 在菜单中选择Conditional FormattingHighlight CellsDuplicate Values
    • 选择是要突出显示唯一值还是重复值。
    • 保存突出显示
    • 选择数据
    • 转到Data,然后转到Filter

    根据颜色过滤:

    诚然,这比您经常使用的电子表格更适合一次性检查数据,因为它需要进行一些格式更改。

    【讨论】:

    • 快速计数非常有效!请注意,您要过滤没有填充的单元格。
    【解决方案7】:

    您可以执行以下步骤:

    1. 首先隔离列(如果有任何相邻列,则通过在要计算唯一值的列之前和/或之后插入空白列;

    2. 然后选择整个列,转到“数据”>“高级过滤器”并选中“仅唯一记录”复选框。这将隐藏所有非唯一记录,以便您可以通过选择整个列来计算唯一记录。

    【讨论】:

      【解决方案8】:

      如果使用 Mac

      1. 高亮列
      2. 复制
      3. 打开终端.app
      4. 输入pbpaste|sort -u|wc -l

      Linux 用户将 pbpaste 替换为 xclip xsel 或类似内容

      Windows 用户,这是可能的,但需要编写一些脚本... 以http://brianreiter.org/2010/09/03/copy-and-paste-with-clipboard-from-powershell/开头

      【讨论】:

        【解决方案9】:

        您可以为唯一记录计数添加新公式

        =IF(COUNTIF($A$2:A2,A2)&gt;1,0,1)

        现在您可以使用数据透视表并获得唯一记录数的SUM。 如果您有两行或多行存在相同值,但您希望数据透视表报告唯一计数,则此解决方案效果最佳。

        【讨论】:

          【解决方案10】:

          我正在使用第 1 行带有标题的电子表格,数据在第 2 行及以下。

          ID 在 A 列中。为了计算有多少不同的值,我将这个公式从第 2 行放到第一个可用列 [F 在我的例子中] 的电子表格的末尾:"=IF(A2=A1,F1+1,1)"

          然后我在空闲单元格中使用以下公式:"=COUNTIF(F:F,1)"。通过这种方式,我确信每个 ID 都被计算在内。

          请注意,必须对 ID 进行排序,否则它们将被计算多次...但与数组公式不同,即使使用 150000 行电子表格,它也非常快。

          【讨论】:

            【解决方案11】:

            使用动态数组公式(截至本帖仅适用于 Office 365 预览体验成员):

            =COUNTA(UNIQUE(A:A))
            

            【讨论】:

              【解决方案12】:

              我的数据集是 D3:D786,D2 中的列标题,D1 中的函数。公式将忽略空白值。

              =SUM(IF(频率(IF(SUBTOTAL(3,OFFSET(D3,ROW(D3:D786)-ROW(D3),,1))),IF(D3:D786"",MATCH(" ~"&D3:D786,D3:D786&"",0))),ROW(D3:D786)-ROW(D3)+1),1))

              输入公式时,CTRL + SHIFT + ENTER

              我在下面的网站上找到了这个,那里有更多关于 Excel 的解释,我不明白,如果你喜欢那种东西的话。

              http://www.mrexcel.com/forum/excel-questions/553903-count-unique-values-filtered-column.html#post2735467

              我将我的数据集复制并粘贴到不同的工作表中以验证它,它对我有用。

              【讨论】:

              • 有什么不明白的地方,试着评论一下
              猜你喜欢
              • 1970-01-01
              • 2010-12-13
              • 2018-04-20
              • 1970-01-01
              • 1970-01-01
              • 2023-01-03
              • 2023-02-22
              • 1970-01-01
              • 2019-06-18
              相关资源
              最近更新 更多