web-dev-qa-db-fra.com

La fonction INDEX d'Excel peut-elle renvoyer un tableau?

Si les données dans la plage A1:A4 sont les suivantes:

Apple
Banana
Orange
Strawberry

Ensuite, INDEX peut être utilisé pour retourner individuellement toute valeur de cette liste, par ex.

= INDEX(A1:A4,3)

Je retournerais Orange.

Existe-t-il une fonction Excel similaire ou une combinaison de fonctions qui vous permettrait effectivement de réaliser quelque chose comme ceci:

= INDEX(A1:A4,{2;3})

Ce qui renverrait un tableau {Banana;Orange}?

Est-ce possible (de préférence sans VBA), et si oui, comment? J'ai du mal à comprendre comment y parvenir, même avec l'utilisation de cellules auxiliaires.

Je peux trouver une solution un peu compliquée si les données sont des nombres (avec MMULT), mais le fait que les données soient du texte me fait trébucher parce que MMULT ne fonctionne pas avec du texte.

5

OFFSET est probablement la fonction que vous souhaitez. 

=OFFSET(A1:A4,1,,2)

Mais pour répondre à votre question, INDEX peut en effet être utilisé pour renvoyer un tableau. Ou plutôt, deux fonctions INDEX séparées par deux points:

=INDEX(A1:A4,2):INDEX(A1:A4,3)

En effet, INDEX renvoie en fait une référence à la cellule OR sous forme numérique et Excel détermine celle que vous souhaitez en fonction du contexte dans lequel vous demandez. Si vous placez deux points au milieu de deux fonctions INDEX, Excel indique "Hé deux points ... normalement, il y a une référence de cellule de chaque côté de l'une de celles-ci" et interprète donc l'INDEX comme tel. Vous pouvez en lire plus à ce sujet sur http://blog.excelhero.com/2011/03/21/the_imposing_index/

En fait, je préfère INDEX à OFFSET, car OFFSET est volatile, ce qui signifie qu’il recalcule en permanence au moindre geste, puis force toutes les formules en aval à faire de même. Pour plus d'informations à ce sujet, lisez mon message https://chandoo.org/wp/2014/03/03/handle-volatile-functions-like-they-are-dynamite/

En fait, vous pouvez simplement utiliser one INDEX et renvoyer un tableau, mais c'est compliqué et nécessite quelque chose appelé déréférencement. Voici du contenu d'un livre que j'écris à ce sujet: 

La feuille de calcul de cette capture d'écran contient une plage nommée appelée Données affectée à la plage A2: E2 en haut. Cette plage contient les nombres 10, 20, 30, 40 et 50. Elle possède également une plage nommée appelée Éléments affectée à la plage A5: B5. Cette plage d'éléments indique à la formule de A8: B8 lequel des cinq nombres de la plage de données doit être affiché.

 enter image description here

Si vous regardez la formule dans A8: B8, vous verrez qu’il s’agit d’une fonction INDEX entrée dans un tableau: {= INDEX (données, éléments)}. Cette formule indique: «Accédez à la plage de données et récupérez des éléments en fonction des éléments choisis par l'utilisateur dans la plage Éléments.» .__ Dans ce cas particulier, l'utilisateur a demandé les cinquième et deuxième éléments. Et bien sûr, c’est ce que INDEX récupère dans les cellules A8: B8: les valeurs correspondantes de 50 et 20.

Mais regardez ce qui se passe si vous prenez cette fonction INDEX parfaitement bonne et essayez de placer un SOMME dessus, comme indiqué dans A11. Vous obtenez un résultat incorrect: 50 + 20 n'est pas égal à 50. Qu'est-il arrivé à 20, Excel?

Pour une raison quelconque, alors que =INDEX(Data,Elements) récupèrera volontiers des éléments disparates quelque part et ramènera ensuite ces nombres séparément dans une plage, il est plutôt réticent de vous y conformer si vous lui demandez de donner ces chiffres à une autre fonction. En fait, il est tellement réticent qu’il ne transmet que le premier élément à la fonction.

Par conséquent, vous êtes apparemment obligé de renvoyer d’abord les résultats de la fonction = INDEX (données, éléments) à la grille si vous souhaitez en faire autre chose. Fastidieux. Mais à peu près tous les professionnels d’Excel vous diraient simplement qu’il n’ya pas de solution de contournement ... c’est comme ça, et vous n’avez pas le choix.

Buuuuuuuut, ils ont tort. À la poste http://excelxor.com/2014/09/05/index-returning-an-array-of-values/ , la formule mystérieuse super-héros XOR décrit deux moyens assez simples de «de -reference ”INDEX afin que vous puissiez ensuite utiliser ses résultats directement dans d'autres formules; une de ces méthodes est montrée dans A18 ci-dessus. Il s'avère que si vous modifiez légèrement la fonction INDEX en ajoutant un bit supplémentaire pour encapsuler cet argument, INDEX joue au ballon. Et tout ce que vous avez à faire est d’envelopper l’argument d’éléments, comme je l’ai fait ci-dessous:

N(IF({1},Elements))

En gardant cela à l'esprit, votre formule originale de comportement inapproprié:

=SUM(INDEX(Data,Elements))

... devient ce chéri complexe mais bien élevé:

=SUM(INDEX(Data, N(IF({1},Elements))))
10
jeffreyweir

Vous pouvez obtenir ce type de comportement sans formule de tableau. En dis D1

=IFERROR(INDEX($A$1:$A$4,CHOOSE(ROWS($1:1),2,3)),"")

et copier. Notez que 2,3 est enfoui dans la fonction CHOOSE().

 enter image description here

Vous pouvez remplacer le 2,3 par n’importe quel ensemble d’indices.

3
Gary's Student

Correct

Mise à jour 3

Vous devriez utiliser une formule matricielle:

Pour = INDEX(A1:A4,{2;3}), écrivez = INDEX(A1:A4,ROW($A$2:$A$3))

Pour utiliser une formule matricielle, (1) , sélectionnez la plage de cellules que vous souhaitez renvoyer, ainsi que les résultats (par exemple, B1: B2), puis appuyez sur (2). F2 et entrez la formule ci-dessus , puis (3) appuyez sur  Ctrl + Shift + Enter.

Mettre à jour

Expliquez:

Vous pouvez contrôler les éléments row_num et column_num de INDEXavec des formules matricielles permettant de renvoyer des résultats plus recherchés.

Il existe deux approches pour renvoyer les résultats d'une formule matricielle:

  • (JE)

    1. Sélectionnez la plage que vous souhaitez afficher les résultats renvoyés.
    2. Presse F2
    3. Tapez votre formule de formulaire de tableau.
    4. Puis appuyez Ctrl + Shift + Enter.

Exemple:

=INDEX($A$1:$A$4,SMALL(IF($B$2=$A$1:$A$4,ROW($A$1:$A$4)-ROW($A$1)+1),ROW($A:$A)))
  • (II)

    1. Entrez la formule du tableau dans la première cellule pour laquelle vous souhaitez afficher les résultats renvoyés (appuyez ensuite sur Ctrl + Shift + Enter), puis prolongez la formule.

Exemple:

=INDEX($A$1:$A$4,SMALL(IF($B$2=$A$1:$A$4,ROW($A$1:$A$4)-ROW($A$1)+1),ROW(A1)))

Conclusion

INDEXLa formule fonctionne sous forme de tableau.

Vous devez entrer row_num ou column_num dans un tableau. pour cela, utilisez les formules de tableau appropriées comme suit: IFname__, SMALLname__, CHOOSEname__. Notez que MATCHn'est pas une formule de tableau.

Fichier échantillon temporaire (pendant 30 jours): book.xlsx

Sheet

0
mgae2m