使用INDIRECT,ADDRESS和MATCH的复杂公式 - 有更好的方法吗?

时间:2014-01-26 10:22:57

标签: excel excel-formula

我需要获得一个范围的MAX,该范围在辅助列中由两个1绑定。

1s是可变数量的行。

举例来说,这是我正在谈论的一个例子:

1   
0   -1.10%
0   0.00%
1   
0   1.43%
0   1.15%
0   2.12%
0   2.69%
0   1.32%
0   0.86%
0   -0.69%
1
~
[and so on] 

因此,例如,我在这里可以看到两个可见范围 - 第1行和第4行之间的范围以及第4行和第12行之间的范围。

在第三列中,无论helper列中有1,我都想要范围的MAX。

我已经设法凑齐了这个完成工作的公式(这是直接从电子表格中复制的,所以它在第122行,数据当前转到第16120行,辅助列是第E列和列值为F)

=IF(E122=1,MAX(F122:INDIRECT(ADDRESS(ROW()+MATCH(1,E123:$E$16120,0),COLUMN(F122),4))),"")

我的基本思路是通过在辅助列中查找下一个1(使用MATCH)来构建范围的底部,将其添加到包含在ADDRESS函数内的当前行(使用ROW和COLUMN)然后绑定它一起使用INDIRECT。最后,它位于IF内部,仅在辅助列中以1打击行。

有人能想到一种更优雅,不那么繁琐的方式吗?

提前致谢。

2 个答案:

答案 0 :(得分:5)

如果您有更大的数据集,我建议您使用INDEX代替OFFSET!后者是不稳定的,即Excel每次重新计算时都会重新计算所有OFFSET公式和任何依赖项。另一方面,INDEX是非易失性的,即只有当它的任何前辈改变时,Excel才会重新计算公式。

因此,试试这个公式:

=IF(E122=1,MAX(F123:INDEX(F123:$F$16120,MATCH(1,E123:$E$16120,0))),"")

答案 1 :(得分:2)

您可以使用OFFSET

=IF(E122=1,MAX(OFFSET(E122,1,1,MATCH(1,E123:$E$16120,0)))-1,"")