在excel中替换volatile OFFSET SUMPRODUCT

时间:2017-11-07 14:10:26

标签: excel

我在excel中使用Frontline的求解器,在某些模型中,整个过程可能因为大量使用excel函数OFFSET而变慢。根据我的研究,这个功能被认为是不稳定的,应该避免。显然,可以用INDEX替换偏移的使用。我需要偏移的是一个向量而不仅仅是一个值,用于SUMPRODUCT。像SUMPRODUCT(array,OFFSET(vector))这样的东西。 INDEX似乎只能输出值而不是矢量。

附件是一个最小例子的屏幕截图,显示了我的公式。黄色和蓝色细胞都是固定的,而配方是在绿色细胞中。单元格B11中的值为16。

enter image description here

所以我的问题是:如何通过不易变的东西替换易变的OFFSET

1 个答案:

答案 0 :(得分:2)

您可以使用INDEX。用以下

替换您的功能
=SUMPRODUCT(B$6:B$8,INDEX($F$6:$I$8,0,1))

在这种情况下,INDEX函数返回区域F6的第一列值:I8。 0返回所有行,1返回第1列。您可能希望将1替换为COLUMN() - 1,以便您可以复制公式,但理想情况下,您可以使用数组公式执行此操作,但这是另一个问题。

我发现使用函数时非常有用的一个提示是能够突出显示功能栏中的部分功能,并通过按F9计算该部分。因此,如果您突出显示" INDEX($ F $ 6:$ I $ 8,0,1)"然后按F9,它将显示它正在使用的值。

来自https://support.office.com/en-gb/article/INDEX-function-a5dcf0dd-996d-40a4-a822-b56b061328bd

"如果将Row_num或Column_num设置为0(零),INDEX将分别返回整个列或行的值数组。要使用作为数组返回的值,请在行的单元格的水平范围内以及列的单元格的垂直范围内输入INDEX函数作为数组公式。