我知道如何使用index
和match
公式来获取匹配单元格的值或位置。但是我不知道该怎么做才能在我正在寻找的单元格不是第一个匹配时获取该信息。
以下图为例。我想获得“成功交付”单元格的位置。在这个示例中,有一个单元格与第11行和第30行中的单元格相匹配。这些位置将来可能会有所不同,所以我需要一个足够聪明的公式来处理它。
我如何获得“成功交付”第二个实例的位置?我想我可以使用第24行的“组合2统计”值作为起点。
我尝试使用这个公式:
=MATCH("Successful Deliveries:",A24:A1000,0)
但它返回的行数为7,这与我开始匹配的A24
单元格相关。
我的最终目标是将细胞中的值直接从“成功交付”的第二场比赛右侧获取。
答案 0 :(得分:1)
在你的公式中,没有进一步的智能,你可以简单地添加23来调整7到结果:
=MATCH("Successful Deliveries:",A24:A1000,0) + 23
您知道23是要添加的数字,因为您在第24行开始搜索。
答案 1 :(得分:0)
完整的答案在这里:
https://exceljet.net/formula/get-nth-match-with-index-match
您使用此公式:
=INDEX(B1:B100,SMALL(if(A1:A100 = "Successful Deliveries:",ROW(A1:A100) - ROW(INDEX(A1:A100,1,1))+1),2))
...其中2是你想要的实例。
确保按ctrl-shift-enter键完成公式。 (你知道你做得对,因为公式得到了大括号{})
如何运作
通常,我们使用INDEX / MATCH来查找值。 Index函数为您提供范围内的第n个值,Match函数确定哪个“n”符合我们的标准。
这里我们以相同的方式使用INDEX,但我们需要更多的智能才能找到“n”,因为它是符合条件的第二个。这就是SMALL的用武之地。小函数“获得数组中的第n个最小值”。所以我们给Small一个期望实例的数量(在这种情况下为2),我们给它一个空白数组和我们喜欢的行数。
我们使用If函数获取空白和行号数组,要求它检查我们的标准(=“成功...”)并使其返回标准通过的行号(=行(A1: A100))。通过将If函数用作数组函数(通过给它数组并使用ctrl-shift-enter),它可以提供整个值列表。
我们的最终值只是一个数字,因为Small函数使用IF中的数组返回一个东西:我们给它的第二小行。