Excel 2010 OFFSET和INDIRECT函数在范围公式中

时间:2013-10-31 05:56:32

标签: excel-2010 excel-indirect

是否有人有使用范围公式中的Excel OFFSETINDIRECT电子表格函数的经验?

我想使用一列值和一个值,但是每行都有一个特定的水平偏移量,其中偏移量的大小是不同的列。所以例如如果范围A1:C3中的数据是:

[1  2  3;
 1  2  3;
 1  2  3]

D1:D3中给出的偏移量为[0; 1; 2],我想使用{=sum(offset(A1:A3, 0, D1:D3)}之类的语法来给出6。

另一种选择是使用INDIRECT函数,使用类似{=SUM(INDIRECT("R"&ROW(A1:A3)&"C"&D1:D4,FALSE))}的语法。

这两个都返回结果,因为它只是矩阵和向量的第一个元素,即1.这是对这些函数的限制,还是有办法解决这个问题?谢谢。

1 个答案:

答案 0 :(得分:1)

(在评论中讨论之后,答案完全被重新编辑)

OFFSET函数在这里没有用,因为它使用范围而不是单个单元格。

对于SUM函数,一切都很简单{=SUM(A1:C3*(COLUMN(A1:C3)=D1:D3))}。或者您甚至可以避免将数组与=SUMPRODUCT(A1:C3,(COLUMN(A1:C3)=D1:D3))一起使用。请注意,D列现在应该引用特定的列号而不是第一列的偏移量,即1;2;3

对于其他函数,它更难a)因为它们从矩阵中计算零(假值); b)因为它们通常不适用于非连续数组(并且任何从矩阵中排除零值的尝试都会遇到#value错误)。但是,FREQUENCY和INDEX的结合起到了作用:

  • 找到平均值:{=(SUM(A1:C3*(COLUMN(A1:C3)=D1:D3)))/INDEX(FREQUENCY((A1:C3*(COLUMN(A1:C3)=D1:D3)),0),2)}
  • 找到中位数:{=MEDIAN(LARGE((A1:C3*(COLUMN(A1:C3)=D1:D3)),ROW(INDIRECT("1:"&INDEX(FREQUENCY((A1:C3*(COLUMN(A1:C3)=D1:D3)),0),2)))))}

希望它有所帮助。