是否有人有使用范围公式中的Excel OFFSET
或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.这是对这些函数的限制,还是有办法解决这个问题?谢谢。
答案 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)))))}
希望它有所帮助。