1

有没有人在范围公式中使用 ExcelOFFSET或电子表格函数的经验?INDIRECT

我想使用一列值的总和,但每行都有一个特定的水平偏移量,其中偏移量的大小是不同的列。因此,例如,如果范围内的数据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。这是对这些函数的限制,还是有办法解决这个问题?谢谢你。

4

1 回答 1

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)))))}

希望能帮助到你。

于 2013-11-01T12:21:08.493 回答