Excel CountifS。 标准多列范围。 无序的比较testing

这是我的第一个问题,所以如果有什么问题请不要杀了我。 我在这个网站上find了很多解决scheme,但现在还没有。 很抱歉,我还无法发布图片。 这并不容易,但我会尝试。

关键点:

我的数据有以下标题:

决定_Id对手1对手2对手3 Suitor1 Suitor2 Suitor3 Suitor4

Decision_id是唯一的整数标识符。 其余的是string。

每一行代表一个特定的司法决定。 每个决定可以有最多3个对手(辩护方)和最多4个追求者(攻击方)。一个特定的一方可以是一个决定的追求者,另一个可以是另一个追随者。

我想要得到什么

交叉表,行和列标题都是我在表中遇到的不同方。 (没有问题,完成。)每个单元格显示特定的对手(由行标题定义)被特定的追求者(列标题)攻击了多less个不同的决定=>所有的对angular线单元格都等于零(一方不能攻击本身)和表是不对称的。

我努力了

申请到第一个细胞,并扩大:

=所有对手的固定范围:$ B $ 2:$ D $ 6“,”想要的对手值:$ A2“,”所有追求者的固定范围:$ E $ 2:$ H $ 6“,”想要的追求者价值:B $ 1“)

我有一个错误。 我想出了标准范围必须是相同的大小。 好的,创build虚拟空栏=>没有错误,但是,结果显然被低估了。 我认为只有当对手和追求者拥有相同的“号码”时才有一场比赛。 详细说明:对于每一行,excel都会testingopponent1和suitor1对应的值,然后是opponent2和suitor2,然后是opponent3和suitor3 …这实际上解释了为什么范围必须是相同的大小。

所以,我需要什么

对于每一行来说,是否要对所有对手进行优秀testing,以testing所需的对手价值。 如果至less有一个对手和一个追求者对应,给它一个匹配并且计数这个决定(尽pipe对手1和追随者3有要求的值)

备注

我已经做了一个VBA代码来完成这个工作,但是这个代码太慢了(整个表格大约需要5个小时),而且我希望对不同types的表格做相同的处理和/或修改这个表格。 所以我对“纯粹的Excel”感兴趣,快速解决scheme。

非常感谢你!

这里的困难部分是将多列范围分隔成单独的行 – 一种方法是在COUNTIF内使用OFFSET ,即这个公式

=SUMPRODUCT(COUNTIF(OFFSET($B$2:$D$6,ROW($B$2:$D$6)-ROW($B$2),0,1),$A2),COUNTIF(OFFSET($E$2:$H$6,ROW($E$2:$H$6)-ROW($E$2),0,1),B$1))

这假定所有的追求者在任何一行上都是不同的,并且所有的对手在任何一行上都是不同的(尽pipe如果不是这种情况,可以修改公式)。

您可以将范围扩展到任意大小 – 尽pipe每个部分的行数必须相同

….或者使用MMULT函数的另一个更晦涩的方法

=SUMPRODUCT(MMULT(($B$2:$D$6=$A2)+0,{1;1;1}),MMULT(($E$2:$H$6=B$1)+0,{1;1;1;1}))

{1; 1; 1}和{1; 1; 1; 1}表示每个部分的列数,所以如果有6个和8个需要相应地更改

另一种可能性是尝试这个数组公式:

 =SUM(MMULT(-TRANSPOSE($B$2:$D$6=$A2),-($E$2:$H$6=B$1))) 

使用CTRL + SHIFT + ENTERinput(或定义为名称,正常input,例如=Total

这应该做到这一点:

 = COUNTIFS($B$2:$B$6,$A2, $E$2:$E$6, B$1) + COUNTIFS($C$2:$C$6,$A2, $E$2:$E$6, B$1) + COUNTIFS($D$2:$D$6,$A2, $E$2:$E$6, B$1) + COUNTIFS($B$2:$B$6,$A2, $F$2:$F$6, B$1) + COUNTIFS($C$2:$C$6,$A2, $F$2:$F$6, B$1) + COUNTIFS($D$2:$D$6,$A2, $F$2:$F$6, B$1) + COUNTIFS($B$2:$B$6,$A2, $G$2:$G$6, B$1) + COUNTIFS($C$2:$C$6,$A2, $G$2:$G$6, B$1) + COUNTIFS($D$2:$D$6,$A2, $G$2:$G$6, B$1) + COUNTIFS($B$2:$B$6,$A2, $H$2:$H$6, B$1) + COUNTIFS($C$2:$C$6,$A2, $H$2:$H$6, B$1) + COUNTIFS($D$2:$D$6,$A2, $H$2:$H$6, B$1) 

这些看起来更简单,如果你把你的数据放到一个表中,或者为Opponent1,Opponent2,Suitor1列等定义命名范围。