2017-09-29 1 views
0

Il semble que l'utilisation des fonctions Excel INDIRECT(ADDRESS(...)) et OFFSET(...) peut être utilisée de façon interchangeable.Excel: INDIRECT (ADRESSE (...)) vs OFFSET (...)

Par exemple, les deux formules suivantes le même résultat à une référence absolue:

= INDIRECT(ADDRESS(1,1)) 

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

Et De même, les deux formules le même résultat à une référence relative (dans ce cas, par exemple, ceux-ci formules reviennent toute valeur dans la cellule en dessous de cette cellule avec la formule):

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

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

Mes questions sont: est une méthode toujours préféré sur l'autre? Il me semble que INDIRECT(ADDRESS(...)) se prête à des références de type plus absolues et OFFSET(...) se prête à plus de références de type relatif, mais comme indiqué ci-dessus, l'une ou l'autre méthode pourrait être utilisée pour accomplir l'un ou l'autre type de référence. Ou, existe-t-il une alternative complètement différente à l'utilisation de ces deux fonctions qui est supérieure à ces deux options?

Répondre

5

Aucune des deux ne sont préférées car les deux sont des fonctions volatiles et trop d'entre elles affecteront les temps de calcul.

La fonction volatile recalc chaque fois que l'application se recalcule, même si les données sous-jacentes n'ont pas changé.

Utilisez INDEX au lieu, il est non volatile:

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

Cela ne recalc lorsque les données auxquelles elle se réfère changements.

Utilisez INDIRECT uniquement lorsque la feuille est la variable.

OFFSET peut presque toujours être remplacé par INDEX.

+0

Bien sûr, '$ 1: $ 1048576' est l'ensemble de la feuille de calcul, donc l'avantage est quelque peu limité. Toujours mieux que * tout changement dans une feuille de calcul dans un classeur * mais pas aussi avantageux que de limiter à une seule colonne ou une ligne. – Jeeped

+0

@Scott Merci. Si la feuille elle-même est la variable, je pense que «INDIRECT» pourrait encore être évité au prix d'allonger la formule. Par exemple. '= IF (, INDEX (Feuille1! $ 1: $ 1048576, ...), INDEX (Feuille2! $ 1: 1048576, ...)) '. Est-ce correct? – ImaginaryHuman072889

+0

@Peter Je pensais plus sur les lignes que la feuille de calcul est une variable qui est dans une cellule. Si vous avez de nombreuses feuilles imbriquées ifs serait trop long. –