这是我的第一个问题,所以如果出现问题,请不要杀了我。我在这个网站上找到了很多解决方案,但这次不是。不幸的是我还不能发布图片。这并不容易,但我会尝试。
重点:
我的数据包含以下标题:
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”感兴趣,快速解决方案。
非常感谢!
答案 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列等定义命名范围,这些看起来更简单......