2017-09-29 46 views
0

使用してExcel関数INDIRECT(ADDRESS(...))OFFSET(...)は互換的に使用することができるようです。エクセル:INDIRECT(ADDRESS(...))対OFFSET(...)

たとえば、次の2つの式は絶対参照に同じ結果を返す:

= INDIRECT(ADDRESS(1,1)) 

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

同様に、次の2つの式は、これらは、例えば、この場合の相対参照(に同じ結果を返します式)は、式でこのセルの下のセルにあるどのような値を返す:

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

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

私の質問は以下のとおりです。一つの方法は、常に他よりも優先されていますか? INDIRECT(ADDRESS(...))は、より絶対的な型参照に役立ち、より多くの相対型参照に役立つと思われますが、上に示したように、いずれの型の参照を達成するためにどちらのメソッドを使用することもできます。あるいは、これらの2つの機能を使用することとは全く別の選択肢がありますが、どちらの選択肢よりも優れていますか?両方が揮発性関数であり、それらのあまりに多くがCALC時間に影響するよう

答えて

5

どちらが好ましいです。

揮発性関数は、基になるデータが変更されていない場合でも、アプリケーションrecalcsするたびに再計算しました。

使用INDEXは、その代わりに、非揮発性である:

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

とき、それは変更を参照しているデータにのみ再計算されます。

シートが可変であるのみ間接的に使用します。 OFFSET

はほとんど常にINDEXに置き換えることができます。

+0

もちろん、$ 1:$ 1048576は全体のワークシートであるため、利点は多少限定されています。さらに、ワークブック内のワークシートの変更は*よりも優れていますが、単一の列や行に限定するほど有利ではありません。 – Jeeped

+0

@Scottありがとうございました。シートそのものが変数であれば、式を長くする代償として、「間接」を避けることができます。例えば。 '= IF(、INDEX(Sheet1!$ 1:$ 1048576、...)、INDEX(Sheet2!$ 1:1048576、...))'となります。これは正しいです? – ImaginaryHuman072889

+0

@Peterワークシートはセル内にある変数なので、私はラインに沿ってもっと考えていました。多くのシートがネストされている場合、ifsは長すぎます。 –