Excel CountifS。标准多列范围。无序比较测试

时间:2013-08-05 07:35:50

标签: excel range countif

这是我的第一个问题,所以如果出现问题,请不要杀了我。我在这个网站上找到了很多解决方案,但这次不是。不幸的是我还不能发布图片。这并不容易,但我会尝试。

重点:

我的数据包含以下标题:

Decision_Id Opponent1 Opponent2 Opponent3 Suitor1 Suitor2 Suitor3 Suitor4

Decision_id是唯一的整数标识符。其余的都是字符串。

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

我想要的是什么

交叉表,其中行和列标题都是我在表中遇到的不同方。 (没问题,完成了。) 每个单元格显示特定对手(由行标题定义)被特定求婚者(列标题)攻击的多少个不同决策=>所有对角线单元格等于ZERO(一方无法攻击自身),并且表格不对称。

我试过

应用于第一个单元格而不是展开:

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

我有一个错误。我发现标准范围必须大小相同。好的,创建了虚拟空列=>没有错误,但结果显然被低估了。我认为只有当对手和求主拥有相同的“数字”时才会有匹配。详细说明:对于每一行,excel测试opponent1和suitor1对应的值,然后是opponent2和suitor2,然后是opponent3和suitor3 ......这实际上解释了为什么范围必须大小相同。

所以,我需要什么

对于每一行,是对所有对手的所有对手进行excel测试,测试所有追求者对所需的追求者价值。如果至少有一个对手和一个追求者对应,给它一个匹配并计算这个决定。(即使opponent1和suitor3有所需的值)

说明

我已经制作了一个VBA代码来完成这项工作,但它太慢了(整个表大约需要5个小时)而且我希望对这种不同的表做同样的事情和/或修改这个。所以我对“纯粹的excel”感兴趣,快速解决方案。

非常感谢!

3 个答案:

答案 0 :(得分:2)

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

=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))

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

您可以将范围扩展到您想要的任何大小 - 尽管每个部分的行数必须相同

....或者这是使用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个那么需要相应地更改

答案 1 :(得分:1)

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

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

使用CTRL + SHIFT + ENTER输入(或定义为名称并正常输入,例如=Total。)

答案 2 :(得分:0)

这应该这样做:

=       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列等定义命名范围,这些看起来更简单......