以下代码允许我在Excel中的数据透视表中确定不同的值:
=SUMPRODUCT(($A$A:$A2=A2)*($B$2:$B2=B2))
另请参阅:Simple Pivot Table to Count Unique Values
代码运行得非常好。但是,有人可以帮我理解这段代码的实际效果吗?
答案 0 :(得分:3)
Firts,我认为你在这里做了一个类型,因为公式应该是:
=SUMPRODUCT(($A$2:$A2=A2)*($B$2:$B2=B2))
让它分解为两部分:
A2
和A2
之间的单元格,因此只检查一个单元格,然后检查等于A2
的单元格数量。在这种情况下,输出应为1,因为您要将A2
与A2
进行比较。但是,您不仅限于将A2
与A2
进行比较。如果您选择了2个单元格等于A2
,则结果将为2.您可以根据需要与A2进行比较(将$替换为要调制的字符)。
我们对第二个括号执行相同操作,但枢轴值为B2
。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值的数组。
这两个数组相乘,结果是1或0值的数组。每个数组具有相同数量的值。
第一个数组的第一个值将与第二个数组的第一个值相乘。 (见红色箭头)
第一个数组的第二个值将与第二个数组的第二个值相乘。 (见蓝色箭头)
等等。
True * True将返回1,其他所有内容将返回0.乘法的结果是:
SumProduct函数的本质是对乘法(乘积)的结果求和,这就是它的作用。
单独使用此函数不会在Excel中建立不同的值。在链接到的线程中,Sumproduct包含在IF语句中,并且这是识别不同值的位置。
=IF(SUMPRODUCT(($A$2:$A2=A2)*($B$2:$B2=B2))>1,0,1)
简单来说:如果当前行的A列和当前行的B列的值组合已经出现在上面,则返回零,否则返回1。
这标记了组合列A和B的不同值。