将 INDEX/MATCH 与多个条件和多个匹配项连接起来

Posted

技术标签:

【中文标题】将 INDEX/MATCH 与多个条件和多个匹配项连接起来【英文标题】:Concatenating INDEX/MATCH with multiple criteria and multiple matches 【发布时间】:2018-09-05 10:32:32 【问题描述】:

我正在使用 Excel 跟踪团队游戏,其中玩家分为团队和团队内的子团队。一个小队中的每个球员都得分一定数量,我想为每个球员提供一个摘要字符串,其中包含同一小队中其他球员的得分。

例子:

A         B       C          D
PLAYER    TEAM    SUBTEAM    POINTS
Alice     Red     1          70
Bob       Red     1          20
Charlie   Red     1          10
Dave      Red     2          70
Erin      Red     2          30
Frank     Blue    1          55
Grace     Blue    1          45

我想要的输出如下所示:

A         B       C          D        E
PLAYER    TEAM    SUBTEAM    POINTS   SUMMARY
Alice     Red     1          70       Bob:20, Charlie:10
Bob       Red     1          20       Alice:70, Charlie:10
Charlie   Red     1          10       Alice:70, Bob:20
Dave      Red     2          70       Erin:30
Erin      Red     2          30       Dave:70
Frank     Blue    1          55       Grace:45
Grace     Blue    1          45       Frank:55

我能做的最远的事情是数组公式中的 CONCATENATE、INDEX 和 MATCH 的组合:

=CONCATENATE(INDEX($A$2:$A$8,MATCH(1,(C2=$C$2:$C$8)*(B2=$B$2:$B$8),0)), ":", INDEX($D$2:$D$8,MATCH(1,(C2=$C$2:$C$8)*(B2=$B$2:$B$8),0)))

不幸的是,这只是为小队中的第一个玩家输出了一个摘要:

A         B       C          D        E
PLAYER    TEAM    SUBTEAM    POINTS   SUMMARY
Alice     Red     1          70       Alice:70
Bob       Red     1          20       Alice:70
Charlie   Red     1          10       Alice:70
Dave      Red     2          70       Dave:70
Erin      Red     2          30       Dave:70
Frank     Blue    1          55       Grace:45
Grace     Blue    1          45       Grace:45

我现在需要做的是:

    在摘要中排除玩家(我不希望 Alice 在 Alice 的摘要中,而只有 Bob 和 Charlie) 让它适用于多场比赛(每个小队可以有任意数量的球员) 让 CONCATENATE 使用未知数量的字符串(因为如上所述,每个子团队中可以有任意数量的玩家)。

想法赞赏!

【问题讨论】:

CONCATENATE 不会返回数组。您将需要 Excel 2016 函数 CONCAT 或 TEXTJOIN,但我相信这些也需要 Office 365 订阅。否则,您将需要 VBA。 【参考方案1】:

我整理了一个辅助列,它将每个玩家/点和来自TEXTJOIN for xl2010/xl2013 with criteria 的 TEXTJOINIFS 连接起来以获得所需的结果。

【讨论】:

看准了!除了按字母顺序之外,还有什么方法可以按列(例如 D 列)对连接的字符串进行专门排序? 要按点排序(即 D 列),您可以反转辅助列;例如70:爱丽丝而不是爱丽丝:70。【参考方案2】:

很遗憾,Excel(Excel 2016 之前的版本)无法方便地加入文本。您可以做的最好的事情(如果您想避免使用 VBA)是使用一些辅助单元格并将此“摘要”拆分为单独的单元格。

请参见下面的示例。将单元格E4中的数组公式拖到单元格J10中。

= IFERROR(INDEX($A$4:$D$10,MATCH(SMALL(IF(($B$4:$B$10=$B4)*($C$4:$C$10=$C4)*($A$4:$A$10<>$A4),
  ROW($A$4:$A$10)),E$3),ROW($A$4:$A$10),0),MATCH(E$2,$A$1:$D$1,0)),"")

注意这是一个数组公式,因此您必须按 Ctrl+Shift+Enter 而不是仅按 Enter 输入此公式后。

当然,在这个例子中,我假设有 3 个玩家。仅靠公式无法满足您对任意数量玩家的要求,但您可以根据需要将“摘要”部分向右扩展。

如果您真的愿意,您甚至可以连接“摘要”行以形成单个单元格,例如类似:

= CONCATENATE(E4,": ",F4,", ",...)

【讨论】:

以上是关于将 INDEX/MATCH 与多个条件和多个匹配项连接起来的主要内容,如果未能解决你的问题,请参考以下文章

IF 函数 - Google 脚本 - 多个条件

loopkup mongodb之后条件的多个匹配项

与字段的一个或多个条件匹配的查询行

INDEX MATCH 根据日期范围和名称标准返回多个结果

使用条件连接 MS Access/SQLQuery 中的多个表

Excel索引与引用另一个工作簿的多个条件匹配