使用MATCH构建单元格范围返回#VALUE

时间:2015-12-22 10:17:57

标签: excel match

我有一个公式,它使用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))

如果没有正确读取单元格范围,我错过了什么?

1 个答案:

答案 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重新计算时它所在的单元格。这发生了   无论先例数据和公式是哪个   公式取决于是否已更改,或公式是否也包含   非易失性函数。