2

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

重点:

我的数据有以下标题:

Decision_Id Opponent1 Opponent2 Opponent3 Suitor1 Suitor2 Suitor3 Suitor4

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

每行代表一个特定的司法判决。每个决定最多可以有 3 个对手(防守方)和最多 4 个追求者(进攻方)。一个特定的一方可以在一个决定中成为追求者,在另一个决定中成为对手。

我想得到什么

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

我努力了

应用于第一个单元格,然后展开:

=COUNTIFS("所有对手的固定范围:$B$2:$D$6","通缉对手值:$A2","所有追求者的固定范围:$E$2:$H$6","通缉追求者值: B$1")

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

所以,我需要什么

是,对于每一行,让 excel 测试所有对手的通缉对手值,测试所有追求者的通缉追求者值。如果至少一个对手和一个追求者对应,给它一个匹配并计算这个决定。(即使对手1和追求者3有想要的值)

评论

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

非常感谢!

4

3 回答 3

2

这里的困难部分是将多列范围分成单独的行 - 一种方法是使用OFFSETwithin 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 个,则需要相应更改

于 2013-08-05T11:16:59.907 回答
1

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

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

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

于 2013-08-05T20:31:19.773 回答
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 列等定义命名范围,这些看起来更简单......

于 2013-08-05T07:44:07.193 回答