Pourquoi l'encapsulation d'une formule matricielle Excel dans un SUM ne produit-elle pas la somme du contenu dans ce cas?

StackOverflow https://stackoverflow.com/questions/808011

  •  03-07-2019
  •  | 
  •  

Question

Peuple intelligent,

Dans Excel, il semble que le fait d'encapsuler une formule matricielle dans un fichier SUM ne génère pas la somme du contenu du tableau dans tous les cas. (C'est-à-dire, me semble-t-il, je pourrais bien être confondu.)

Cela est apparu lorsqu’on a essayé d’écrire l’équivalent d’une jointure interne dans Excel. Pour des raisons impliquant Excel pour Mac, je n'utilise pas Visual Basic ou MS Query: uniquement des formules matricielles et INDEX / MATCH. Je pense que j'ai réussi, mis à part ce comportement bizarre que je n'arrive pas à comprendre.

Actuellement, j'utilise un kludge, mais ce serait bien de ne pas avoir à le faire. Toute aide ou conseil serait très grandement apprécié.

Ce qui suit reproduit le problème:

Tableau 1

key | fkey
----+------
  a |   x
  a |   y
  b |   x
  b |   y

Tableau 2

key | value
----+------
  x |   1
  y |  10

La mise en page ci-dessus est supposée représenter l'apparence de ces deux petits tableaux dans la feuille de calcul: rien d'intelligent ne se passe. Les quatre plages évidentes sont nommées table1.key , table1.fkey , table2.key et table2.value .

Alors, la jointure interne. Je voudrais les valeurs du tableau 2 qui correspondent à une clé spécifique du tableau 1, avec la jointure sur `table1.fkey = table2.key '. Saisie de la formule:

{=("a"=table1.key)*INDEX(table2.value, MATCH(table1.fkey, table2.key, FALSE))}

dans deux cellules verticales donne le résultat souhaité; à savoir:

1
10

(Cool ou quoi?) Jusqu'ici, tout va bien. Mais maintenant, je veux réellement la somme des deux nombres ci-dessus. J'ai donc simplement enveloppé la formule ci-dessus dans un SUM et entré le résultat dans une cellule unique :

{=SUM(("a"=table1.key)*INDEX(table2.value, MATCH(table1.fkey, table2.key, FALSE)))}

Résultat?

2

Quelqu'un at-il une idée de ce qui se passe sur la Terre?

James

Était-ce utile?

La solution

L'argument row_num d'INDEX ne peut pas être un tableau lorsqu'il est utilisé dans une formule de tableau à cellule unique. La fonction INDEX renvoie toujours 1. Essayez ceci

=SUM(INDEX(table2.value,{2,1}))

Il retournera toujours 10, car INDEX n'acceptera que le premier élément du tableau. Je ne sais pas pourquoi ils fonctionnent différemment pour les formules à matrice unique vs multicell.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top