138

这似乎是一个简单的数据透视表来学习。我想为我分组的特定值计算唯一值。

例如,我有这个:

ABC   123
ABC   123
ABC   123
DEF   456
DEF   567
DEF   456
DEF   456

我想要的是一个向我展示这个的数据透视表:

ABC   1
DEF   2

我创建的简单数据透视表只是给了我这个(多少行的计数):

ABC   3
DEF   4  

但我想要的是唯一值的数量。

我真正想做的是找出第一列中的哪些值在所有行的第二列中没有相同的值。换句话说,“ABC”是“好”,“DEF”是“坏”

我确信有一种更简单的方法可以做到这一点,但我想我会试试数据透视表......

4

16 回答 16

252

更新:您现在可以使用 Excel 2013 自动执行此操作。我将其创建为新答案,因为我之前的答案实际上解决了一个略有不同的问题。

如果您有该版本,请选择您的数据以创建数据透视表,并在创建表时确保选中“将此数据添加到数据模型”复选框(见下文)。

勾选“将此数据添加到数据模型”旁边的框

然后,当您的数据透视表打开时,正常创建行、列和值。然后单击要计算不同计数的字段并编辑字段值设置: 编辑字段值设置

最后,向下滚动到最后一个选项并选择“不同计数”。 选择“不同计数”选项

这应该会更新您的数据透视表值以显示您正在查找的数据。

于 2014-02-04T12:21:45.117 回答
110

插入第三列并在单元格中C2粘贴此公式

=IF(SUMPRODUCT(($A$2:$A2=A2)*($B$2:$B2=B2))>1,0,1)

并将其复制下来。现在根据第 1 列和第 3 列创建您的数据透视表。查看快照

在此处输入图像描述

于 2012-08-09T03:18:52.793 回答
10

我想在不需要公式的组合中添加一个额外的选项,但如果您需要计算两个不同列中集合中的唯一值,这可能会有所帮助。使用原始示例,我没有:

ABC   123  
ABC   123  
ABC   123   
DEF   456  
DEF   567  
DEF   456  
DEF   456

并希望它显示为:

ABC   1  
DEF   2

但更像是:

ABC   123  
ABC   123  
ABC   123  
ABC   456  
DEF   123  
DEF   456  
DEF   567  
DEF   456  
DEF   456

并希望它显示为:

ABC  
   123    3  
   456    1  
DEF  
   123    1  
   456    3  
   567    1

我发现将数据转换为这种格式然后能够进一步操作它的最佳方法是使用以下内容:

在此处输入图像描述

一旦您选择“运行总计”,然后选择辅助数据集的标题(在这种情况下,它将是包含 123、456 和 567 的数据集的标题或列标题)。这将为您提供一个最大值,其中包含您的主要数据集中该集合中的项目总数。

然后我复制了这些数据,将其粘贴为值,然后将其放入另一个数据透视表中以更轻松地对其进行操作。

仅供参考,我有大约 25 万行数据,所以这比一些公式方法好得多,尤其是那些试图跨两列/数据集进行比较的方法,因为它不断使应用程序崩溃。

于 2013-08-02T11:51:11.507 回答
6

我发现最简单的方法是使用Distinct Count下面的选项Value Field Settings左键Values单击窗格中的字段)。的选项Distinct Count位于列表的最底部。

点击位置

这是之前 (TOP; normal Count) 和之后 (BOTTOM; Distinct Count)

数数

不同的计数

于 2017-07-06T00:46:29.900 回答
4

参见 Debra Dalgleish 的独特物品计数

在此处输入图像描述

于 2012-08-09T03:21:21.987 回答
3

不必为以下公式对表进行排序,以便为每个存在的唯一值返回 1。

假设问题中数据的表格范围是 A1:B7 在单元格 C1 中输入以下公式:

=IF(COUNTIF($B$1:$B1,B1)>1,0,COUNTIF($B$1:$B1,B1))

将该公式复制到所有行,最后一行将包含:

=IF(COUNTIF($B$1:$B7,B7)>1,0,COUNTIF($B$1:$B7,B7))

这导致第一次找到记录时返回 1,之后所有时间返回 0。

只需对数据透视表中的列求和

于 2013-10-01T20:52:31.707 回答
2

我解决这个问题的方法与我在这里看到的有点不同,所以我会分享一下。

  1. (首先复制您的数据)
  2. 连接列
  3. 删除连接列上的重复项
  4. 最后 - 以结果集为中心

注意:我想包含图像以使其更容易理解,但不能因为这是我的第一篇文章;)

于 2014-10-23T18:17:48.820 回答
1

悉达多的回答非常棒。

但是,这种技术在处理大量数据时可能会遇到麻烦(我的计算机在 50,000 行时冻结)。一些处理器密集程度较低的方法:

单一唯一性检查

  1. 按两列排序(本例中为 A、B)
  2. 使用查看较少数据的公式

    =IF(SUMPRODUCT(($A2:$A3=A2)*($B2:$B3=B2))>1,0,1) 
    

多重唯一性检查

如果您需要检查不同列中的唯一性,则不能依赖两种排序。

反而,

  1. 排序单列 (A)
  2. 添加涵盖每个分组的最大记录数的公式。如果 ABC 可能有 50 行,则公式为

    =IF(SUMPRODUCT(($A2:$A49=A2)*($B2:$B49=B2))>1,0,1)
    
于 2013-02-08T21:55:36.777 回答
1

Excel 2013 可以在数据透视表中进行不同计数。如果无法访问 2013 年,并且数据量较小,我会制作原始数据的两份副本,并在副本 b 中选择两列并删除重复项。然后进行枢轴并计算您的列 b。

于 2014-10-14T20:39:11.593 回答
1

步骤 1.添加列

步骤 2.IF(COUNTIF(C2:$C$2410,C2)>1,0,1)在第一条记录中使用公式 =

步骤 3.将其拖到所有记录中

步骤 4.用公式过滤列中的“1”

于 2015-09-09T12:36:26.360 回答
1

您可以将 COUNTIFS 用于多个条件,

=1/COUNTIFS(A:A,A2,B:B,B2) 然后向下拖动。您可以在其中放置任意数量的标准,但这往往需要花费大量时间来处理。

于 2015-07-09T19:01:24.413 回答
0

如果您对数据进行了排序..我建议使用以下公式

=IF(OR(A2<>A3,B2<>B3),1,0)

这更快,因为它使用更少的单元格来计算。

于 2013-05-27T06:58:02.557 回答
0

我通常按​​需要进行不同计数的字段对数据进行排序,然后使用 IF(A2=A1,0,1); 然后你会在每组 ID 的第一行得到一个 1。简单,不需要任何时间来计算大型数据集。

于 2014-06-05T11:12:43.137 回答
0

您可以创建一个额外的列来存储唯一性,然后在您的数据透视表中进行总结。

我的意思是,细胞C1应该永远是1. 单元格C2应包含公式=IF(COUNTIF($A$1:$A1,$A2)*COUNTIF($B$1:$B1,$B2)>0,0,1)。将此公式复制下来,以便单元格C3包含=IF(COUNTIF($A$1:$A2,$A3)*COUNTIF($B$1:$B2,$B3)>0,0,1)等等。

如果你有一个标题单元格,你会想要将这些都向下移动一行,你的C3公式应该是=IF(COUNTIF($A$2:$A2,$A3)*COUNTIF($B$2:$B2,$B3)>0,0,1).

于 2012-08-09T03:20:07.073 回答
0

您也可以使用辅助列VLOOKUP。我测试过,看起来比COUNTIF.

如果您使用标题并且数据从单元格开始A2,则在行中的任何单元格中使用此公式并复制到同一列中的所有其他单元格中:

=IFERROR(IF(VLOOKUP(A2;$A$1:A1;1;0)=A2;0;1);1)
于 2018-10-03T07:40:20.100 回答
-3

我找到了一种更简单的方法。参考 Siddarth Rout 的示例,如果我想计算 A 列中的唯一值:

  • 添加一个新列 C 并用公式“=1/COUNTIF($A:$A,A2)”填充 C2
  • 将公式向下拖动到列的其余部分
  • 以 A 列作为行标签并在值中求和 {column C) 以获取 A 列中唯一值的数量
于 2013-01-08T17:06:46.583 回答