我正在尝试在 excel 中构建一个公式,以传递两个文本值以在列表中匹配并查找它们之间的单元格数。计数需要按 1 到 27 的顺序进行,如果一个变量位于第 27 行,另一个变量位于第 6 行,则计数应为 (27, 1, 2, 3, 4, 5, 6)。
我有两列,ColA 包含序列号,ColB 包含文本。我使用另外两列引用 ColB 中的文本作为列表来选择两个变量。
然后,我使用索引公式从 ColA 中提取索引号,然后使用该索引创建动态范围并计算两者之间的单元格数,但是没有任何结果。
这是我的公式 对于索引 =INDEX($E$4:$F$30, MATCH(I3,$F$4:$F$30,0),1) 对于计数 = =COUNT(INDIRECT("E"&J3&":E"&J4))
我确信有更好的方法来解决这个问题,但我什么都不知道,希望有人能帮助我。
非常感谢您的帮助。
谢谢
答案1
对于这样的计算,不需要 INDEX() 函数 - 返回的值MATCH() 函数已经是序列中元素的索引。因此,在收到两个所需字符串的索引后,您将通过通常的减法找到它们之间的距离(以单元格为单位):
MATCH(I3;$F$4:$F$30;0)-MATCH(H3;$F$4:$F$30;0)
只要第二个搜索字符串低于第一个字符串,这种方法就很有效 - 索引差始终为正。要处理相反的情况,请使用技巧:将序列的长度添加到结果中,然后使用相同的数字除以序列的长度,取余数MOD() 函数。最后,将结果加 1,以计算包含搜索字符串的两个单元格的数量:
=MOD(MATCH(I3;$F$4:$F$30;0)-MATCH(H3;$F$4:$F$30;0)+COUNTA($F$4:$F$30);COUNTA($F$4:$F$30))+1
或者 - 如果序列的长度永远不会改变并且始终为 27 - 你可以不用COUNTA() 函数:
=MOD(MATCH(I3;$F$4:$F$30;0)-MATCH(H3;$F$4:$F$30;0)+27;27)+1