SUMPRODUCT命令在这个例子中是如何工作的?

时间:2015-08-07 08:15:50

标签: excel count pivot unique

以下代码允许我在Excel中的数据透视表中确定不同的值:

=SUMPRODUCT(($A$A:$A2=A2)*($B$2:$B2=B2))

另请参阅:Simple Pivot Table to Count Unique Values

代码运行得非常好。但是,有人可以帮我理解这段代码的实际效果吗?

2 个答案:

答案 0 :(得分:3)

Firts,我认为你在这里做了一个类型,因为公式应该是:

=SUMPRODUCT(($A$2:$A2=A2)*($B$2:$B2=B2))

让它分解为两部分:

  • 首先,我们检查A2A2之间的单元格,因此只检查一个单元格,然后检查等于A2的单元格数量。在这种情况下,输出应为1,因为您要将A2A2进行比较。但是,您不仅限于将A2A2进行比较。如果您选择了2个单元格等于A2,则结果将为2.您可以根据需要与A2进行比较(将$替换为要调制的字符)。 我们对第二个括号执行相同操作,但枢轴值为B2
  • 之后,您需要了解SUMPRODUCT的功能。它将产品的值与一系列数组相加。例如,假设您A1上的值为1,A2上为1,B1上为2,B2上为3,如果您创建SUMPRODUCT((A1:A2)*(B1:B2)),则为将获得(1*2) + (1*3) = 5。因此,在您给我们的示例中,它将给出(A2=A2)*(B2=B2) = 1
  • 的总和

因此,它将输出等于(A2,B2)的对的数量(Ax,Bx)。通过链接,您可以看到,如果仅选择第一行,则函数将输出1(因此IF将输出1),但如果选择前2行,则函数将输出2 ,(因此IF将输出0)。

我希望这对你有意义,因为我希望我在解释中没有犯任何错误。

答案 1 :(得分:3)

您写道:以下代码允许我在Excel中的数据透视表中确定不同的值

没有。仅这个公式并不能做到这一点。继续阅读有关内容的解释。

公式中有一个拼写错误。它应该是

=SUMPRODUCT(($A$2:$A2=A2)*($B$2:$B2=B2))

看到区别?

公式从第2行开始并向下复制。在每一行中,$ A $ 2参考和$ B $ 2参考将保持不变。 $符号使它们成为绝对参考。相关引用$ A2和A2将在向下复制时更改其行号,因此在第3行中,A2将更改为A3,B2将更改为B3。在下一行中,它将是A4和B4,依此类推。

您可能希望创建一个示例场景,其数据类似于您链接到的线程中的数据。然后使用"评估公式" “公式”功能区上的工具可逐步查看计算的内容。公式从内到外评估。让我们假设公式已经被复制到第5行,我们现在正在查看

=SUMPRODUCT(($A$2:$A5=A5)*($B$2:$B5=B5))

($A$2:$A5=A5)此位将A2中A5的所有单元格与A5中的值进行比较。结果是一个包含四个值的数组,无论是true还是false。下一位($B$2:$B5=B5)也返回一个true或false值的数组。

enter image description here

这两个数组相乘,结果是1或0值的数组。每个数组具有相同数量的值。

第一个数组的第一个值将与第二个数组的第一个值相乘。 (见红色箭头)

第一个数组的第二个值将与第二个数组的第二个值相乘。 (见蓝色箭头)

等等。

True * True将返回1,其他所有内容将返回0.乘法的结果是:

enter image description here

SumProduct函数的本质是对乘法(乘积)的结果求和,这就是它的作用。

单独使用此函数不会在Excel中建立不同的值。在链接到的线程中,Sumproduct包含在IF语句中,并且这是识别不同值的位置。

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

简单来说:如果当前行的A列和当前行的B列的值组合已经出现在上面,则返回零,否则返回1。

这标记了组合列A和B的不同值。