2017-09-29 121 views
0

似乎使用Excel功能INDIRECT(ADDRESS(...))OFFSET(...)可以互換使用。Excel:INDIRECT(ADDRESS(...))與OFFSET(...)

例如,下面兩個公式返回相同的結果爲絕對參考:

= INDIRECT(ADDRESS(1,1)) 

= OFFSET(<current cell>,1-ROW(),1-COLUMN()) 

並且類似地,接下來的兩個公式返回相同的結果,以相對參考(在該情況下,例如,這些公式返回任何值是在小區該小區下面的公式):

= OFFSET(<current cell>,1,0) 

= INDIRECT(ADDRESS(ROW()+1,COLUMN())) 

我的問題是:有個方法總是優於其他?在我看來,INDIRECT(ADDRESS(...))適用於更多的絕對類型引用,OFFSET(...)適用於更多的相對類型引用,但如上所示,可以使用任一種方法來完成任一類型的引用。或者,與使用這兩種功能相比,這兩種功能是否有完全不同的選擇?

回答

5

兩者都不是首選,因爲它們都是易失性函數,其中太多會影響計算時間。

即使基礎數據沒有改變,每次應用程序重新計算時,易失性函數都會被重新計算。

使用指標代替它的是非易失性:

=INDEX($1:$1048576,ROW()+1,COLUMN()) 

時的數據,它是指改變這隻會重計算。

僅當工作表是變量時才使用INDIRECT。

OFFSET幾乎總是可以用INDEX替換。

+0

當然,'$ 1:$ 1048576'是整個工作表,所以優點是有限的。仍比任何工作簿中的任何工作表中的任何更改更好,但不如限制爲單列或單列。 – Jeeped

+0

@Scott謝謝。如果工作表本身就是變量,我認爲可以避免使用「間接」,但要花費更長的時間。例如。 '= IF(,INDEX(Sheet1!$ 1:$ 1048576,...),INDEX(Sheet2!$ 1:1048576,...))''。它是否正確? – ImaginaryHuman072889

+0

@Peter我正在考慮更多的方面,因爲工作表是一個單元格中的變量。如果你有很多嵌套ifs會太長。 –