Obtenir le contenu d'une cellule en fonction des numéros de ligne et de colonne

96

Je souhaite obtenir le contenu d'une cellule en fonction de son numéro de ligne et de colonne. Les numéros de ligne et de colonne sont stockés dans des cellules (ici B1, B2). Je sais que les solutions suivantes fonctionnent, mais elles semblent un peu piratées.

Sol 1

=CELL("contents",INDIRECT(ADDRESS(B1,B2)))

Sol 2

=CELL("contents",OFFSET($A$1, B1-1,B2-1))

N'y a-t-il pas de méthode moins verbeuse? (comme = CellValue (row, col) ou autre)?

Édition / clarification: je veux juste utiliser les formules de feuille de calcul Excel. Pas de VBA. En bref, je recherche à peu près l'équivalent de la méthode VBA Cells () en tant que formule Excel.

Philipp
la source
Pouvons-nous avoir un peu plus de contexte? Utilisez-vous uniquement des formules Excel? VBA? Une autre méthode?
Saladin Akara le

Réponses:

141

Vous n'avez pas besoin de la partie CELL () de vos formules:

=INDIRECT(ADDRESS(B1,B2))

ou

=OFFSET($A$1, B1-1,B2-1)

fonctionnera tous les deux. Notez que les deux INDIRECTet OFFSETsont des fonctions volatiles. Les fonctions volatiles peuvent ralentir le calcul car elles sont calculées à chaque recalcul.

Charles Williams
la source
C'est assez utile pour que j'aimerais le voir édité pour avoir le bon nombre de parenthèses fermantes.
Wyck
6
Étant donné la popularité de cette question / réponse, ce serait formidable d'avoir une petite phrase ici sur ce qu'est une fonction volatile .
LondonRob
Notez qu'avec le second formulaire, en fonction de $ a $ 1, il est nécessaire de ne pas déplacer $ a $ 1 de quelque manière que ce soit dans les modifications ultérieures de la feuille.
Erk
INDIRECT+ ADDRESSest la voie à suivre. Excel dans ma langue se traduit OFFSETen 2 mots séparés par un point. C'est le pire (avec les trémas dans les noms de fonctions)!
Bitterblue
29

Essayez = index (ARRAY, ROW, COLUMN)

où: Tableau: sélectionnez toute la feuille Ligne, Colonne: Vos références de ligne et de colonne

Cela devrait être plus facile à comprendre pour ceux qui étudient la formule.

Albert Shenko
la source
2

Cela m'a pris du temps, mais voici comment je l'ai rendu dynamique. Cela ne dépend pas d'une table triée.

J'ai d'abord commencé avec une colonne de noms d'états (colonne A) et une colonne d'aéronefs dans chaque état (colonne B). (La ligne 1 est une ligne d'en-tête).

Trouver la cellule contenant le nombre d'aéronefs était:

=MATCH(MAX($B$2:$B$54),$B$2:$B$54,0)+MIN(ROW($B$2:$B$54))-1

Je l'ai mis dans une cellule, puis j'ai donné un nom à cette cellule, "StateRow". Ensuite, en utilisant les conseils ci-dessus, je me suis retrouvé avec ceci:

=INDIRECT(ADDRESS(StateRow,1))

Cela renvoie le nom de l'état à partir de la valeur dynamique de la ligne "StateRow", colonne 1

Maintenant, comme les valeurs de la colonne de comptage changent avec le temps à mesure que davantage de données sont entrées, je sais toujours quel état a le plus d'avions.

user3573562
la source