Sumproduct或Countif在2Dmatrix上

我正在处理来自过敏人群的数据。 每个人都有一个独特的ExceptionID,每个过敏原都有独特的AllergenID(总计451个)。

我有一个数据表有2列(ExceptionID和AllergenID),其中每个人的过敏是逐行列出。 这意味着ExceptionID列对于有多种过敏症的人具有重复值,并且AllergenID列具有针对具有该过敏症的不同人的重复值。

我正在计算这个人群中每对过敏症有多less次(例如过敏原#107和过敏原#108,过敏原#107和过敏原#109等)。 为了简单起见,我创build了451行X 451列的matrix,表示每对(实际上两次,因为A / B和B / A是等价的)。

我不知何故需要使用行名称(allergenid)来查找我的数据表中的ExceptionID,并计数匹配从列名称(也AllergenID)的ExceptionIDs的情况。 我使用Vlookup或Index / Match没有问题,但是我正在努力查找和Sumproduct或Countif公式的正确组合。

任何帮助是极大的赞赏!

Mike PS我正在使用Excel 2016,如果这改变了任何东西。

– = UPDATE = – 所以Dirk和MacroMarcbuild议的方法都可以工作,但是我不能将后者应用到我的完整数据集(17,000+行),因为这需要很长时间。

我从那以后决定把它变成一个VBAmacros,因为我们现在想看到三元组而不是对的数量。

用2列开始,这是不可能的…你需要检查每个ExceptionID有2个不同的特定的AllergenID。 更好地使用ExceptionID为辅助表的行和AllergenID作为列(或相反的…无论你喜欢什么)。 助手表需要一个公式如下:

=COUNTIFS($A:$A,$D2,$B:$B,E$1) 

然后可以自动填充。 (范围是从我的例子,你需要改变他们到你的需要)。

有了这个辅助matrix,你可以很容易地去做这样的大matrix:

 =COUNTIFS(E:E,1,INDEX($E:$G,,MATCH($I2,$E$1:$G$1,0)),1) 

再一次,你可以自动填充这个公式,但你需要改变它,所以它符合你的需求。
因为这些列具有相同的ID2(将是您的AllergenID),所以无需查找它们,因为E:E会随自动填充自动更改。

公式中最重要的部分是不应该被搞乱的$ ,或者你不能自动填充它。

我自制的例子的图片(公式来自每个表格的左上方单元格):
在这里输入图像说明

如果你还有任何问题,只要问:)

它可以直接从您的原始设置与数组公式:

请注意,在复制之前,必须使用Ctrl-Shift-Enterinput数组公式:

在这里输入图像说明

在示例图片中,我将“数据范围$ A $ 2:$ A $ 21”命名为“People”,将$ B $ 2:$ B $ 21命名为“Allergens”,以使其成为更好的设置。 您可以在配方栏中看到如何看起来像一个公式。 但是,您可以在第一个matrix单元格中使用这样的标准参考:

编辑:傻我,Nfunction不需要把布尔变成1和0,因为繁殖布尔人将做的伎俩。 下面的公式工程…

SUM(IF(MATCH($A$2:$A$21,$A$2:$A$21,0)=ROW($A$2:$A$21)-1, NOT(ISERROR(MATCH($A$2:$A$21&$E2,$A$2:$A$21&$B$2:$B$21,0)))*NOT(ISERROR(MATCH($A$2:$A$21&F$1, $A$2:$A$21&$B$2:$B$21,0))), 0))

然后从F2中复制。 它也许可以用技术或者其他方法来改进,但这只是技术的一个粗略的例子。