2013-10-31 151 views
1

有沒有人在範圍公式中使用Excel OFFSETINDIRECT電子表格函數的經驗?範圍公式中的Excel 2010 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

另一種選擇是使用間接功能,使用類似{=SUM(INDIRECT("R"&ROW(A1:A3)&"C"&D1:D4,FALSE))}的語法。

這兩個都會返回結果,因爲它只是矩陣和向量的第一個元素,即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錯誤中)。然而,頻率和指標組合的伎倆:

  • 發現平均:{=(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)))))}

希望它能幫助。

+0

謝謝,但我覺得我沒有說清楚。數組D1:D3不是(列,高,寬),而是一列列偏移量。即,我想要做的是(A1偏移0列)+(B1偏移1列)+(C1偏移2列)。所以你的建議是有幫助的,但不要回答我不幸的問題。任何其他想法? – TimX

+0

@TimX,對不起,我很樂意幫忙,但現在看起來比以前更混亂。 OFFSET函數中的列定義了計算的起點。因此,如果您想用偏移量(A1偏移0列)+(B1偏移1列)+(C1偏移2列)來對範圍(A1:A3)進行總和,那麼它將相當於求和(A1:A3)+(C1:C3)+(E1:E3)。那是你要的嗎? –

+0

否:我想要A1 + B2 + C3。列A1:A3與列偏移[0,1,2]是哪一個。希望很明顯, – TimX