我有一个公式,它使用LARGE函数找到10个最高值,并设置一个单元格范围。 SALESNew是52周的数字,第k个最大值是SALES Summ $ C ......
=LARGE('2015SALESNew'!$D$250:$BC$250,'SALES Summ'!$C6)
我需要扩展它以根据产品范围动态选择SALESNew上的行。我已经尝试了各种构建单元格范围的方法,所有这些方法在单独使用时都返回正确的结果,但如果我在LARGE公式中使用它,则会返回#VALUE。
以下示例:
=LARGE(("'2015SALESNew'!$D$"&G43&":$BC$"&G43),'SALES Summ'!$C43)
$G43 contains =MATCH($A38,'2015SALESNew'!A:A,0)
我在下面尝试的3种方法都返回了正确的范围
('2015SALESNew'!$D$255:$BC$255) but the formula result is always #VALUE.
="'2015SALESNew'!$D$"&G43&":$BC$"&G43
="'2015SALESNew'!$D$"&MATCH($A38,'2015SALESNew'!A:A,0)&":$BC$"&MATCH($A38,'2015SALESNew'!A:A,0)
=CONCATENATE("'2015SALESNew'!$D$",MATCH($A38,'2015SALESNew'!A:A,0),":$BC$",MATCH($A38,'2015SALESNew'!A:A,0))
如果没有正确读取单元格范围,我错过了什么?
答案 0 :(得分:1)
我发现构建动态范围引用的最佳方法是使用INDEX
函数。正如帮助文件所示 - 索引(参考表格)返回特定行和列交叉处的单元格引用。
因此,作为一个例子,=INDEX($J:$J,5)
将返回$ J:$ J范围内第5行交叉处的引用 - 即$ J $ 5。
在此公式中添加另一个INDEX,比如$ N:$ N范围内的第10行的交集,并且您引用了一系列单元格:=INDEX($J:$J,5):INDEX($N:$N,10)
。
通过Evaluate Formula运行它,它将显示范围$ J $ 5:$ N $ 10 - 将其包装在SUM函数中,它将累计该范围内的所有值。
现在要使其动态化 - 公式COUNTA($N:$N)
将计算N列中非空的所有单元格。如果N列中没有空格,这将有效地为您提供包含N列数据的最后一行
所以现在我们可以重写公式来阅读=$J$5:INDEX($N:$N,COUNTA($N:$N))
。
我已经将J5更改为常量 - 如果它不会改变也可以 - 以及对包含N列数据的最后一个单元格的第二次引用(在N列中没有空格) )。现在我的例子中引用了J5:N10
将其包含在LARGE函数=LARGE($J$5:INDEX($N:$N,COUNTA($N:$N)),3)
中,它显示我范围内的第三大数字。
编辑:作为额外奖励,INDEX函数是非易失性的,而类似的OFFSET函数和INDIRECT函数是易失性的 - 每当您计算时都会导致开销。 http://www.decisionmodels.com/calcsecretsi.htm
挥发性功能是导致重新计算公式的功能 每次Excel重新计算时它所在的单元格。这发生了 无论先例数据和公式是哪个 公式取决于是否已更改,或公式是否也包含 非易失性函数。