Utilisation de RECHERCHEV dans une formule matricielle sur des feuilles de calcul Google
-
09-06-2019 - |
Question
En fait, je veux attribuer des scores numériques aux notes alphabétiques et les additionner.Dans Excel, mettre le LOOKUP
la fonction dans une formule matricielle fonctionne :
{=SUM(LOOKUP(grades, scoringarray))}
Avec le VLOOKUP
fonction, cela ne fonctionne pas (obtient uniquement le score de la première année).Google Spreadsheets ne semble pas avoir le LOOKUP
fonction et VLOOKUP
échoue de la même manière en utilisant :
=SUM(ARRAYFORMULA(VLOOKUP(grades, scoresarray, 2, 0)))
ou
=ARRAYFORMULA(SUM(VLOOKUP(grades, scoresarray, 2, 0)))
Est-il possible de faire cela (mais j'ai une mauvaise syntaxe) ?Pouvez-vous suggérer une méthode qui permet d'avoir le calcul dans une cellule simple comme celle-ci plutôt que de cacher les recherches ailleurs et de les additionner ensuite ?
La solution 3
Je ne vois toujours pas les formules dans votre exemple (juste les valeurs), mais c'est exactement ce que j'essaie de faire en termes de résultat ;évidemment, je peux déjà le faire "à côté" et additionner séparément - la clé pour moi est de le faire dans une seule cellule.
Je l'ai revu ce matin - en utilisant le MATCH
la fonction de recherche fonctionne dans une formule matricielle.Mais alors le INDEX
la fonction ne le fait pas.J'ai aussi essayé de l'utiliser avec OFFSET
et INDIRECT
sans succès.Finalement, le CHOOSE
la fonction ne semble pas accepter une plage de cellules comme liste parmi laquelle choisir - la plage se dégrade en une seule valeur (la première cellule de la plage).Il convient également de noter que le CHOOSE
la fonction n'accepte que 30 valeurs parmi lesquelles choisir (selon la documentation).Tout cela est très ennuyeux.Cependant, j'ai maintenant une solution fonctionnelle dans une cellule :en utilisant le CHOOSE
fonction et listant explicitement les cellules de résultat une par une dans les arguments comme ceci :
=ARRAYFORMULA(SUM(CHOOSE(MATCH(D1:D8,Lookups!$A$1:$A$3,0),
Lookups!$B$1,Lookups!$B$2,Lookups!$B$3)))
Évidemment, cela ne s'étend pas très bien, mais j'espère que les tables de recherche sont par nature assez fixes.Pour les tables de recherche plus volumineuses, il est difficile de saisir toutes les cellules individuellement et certaines personnes peuvent dépasser la limite de 30 cellules.
J'apprécierais certainement une solution plus élégante !
Autres conseils
J'ai bien peur de penser que la réponse est non.À partir du texte d'aide surhttp://docs.google.com/support/spreadsheets/bin/answer.py?answer=71291&query=arrayformula&topic=&type=
La vraie puissance d'ARRAYFORMULA vient lorsque vous prenez le résultat d'un de ces calculs et l'enveloppez dans une formule qui prend des arguments de tableau ou de plage :SOMME, MAX, MIN, CONCATENER,
Comme vlookup prend une seule cellule pour rechercher (dans le premier argument), je ne pense pas que vous puissiez le faire fonctionner sans utiliser une plage distincte de recherches.
Je sais que ce fil est assez ancien, mais je suis aux prises avec ce même problème depuis un certain temps.J'ai finalement trouvé une solution (enfin, Frankenstiened une ensemble).Il est à peine plus élégant, mais devrait pouvoir fonctionner sans problème avec de grands ensembles de données.
La solution utilise les éléments suivants :
=ARRAYFORMULA(SUM(INDIRECT(ADDRESS(MATCH(), MATCH())))
comme substitut de la fonction vlookup.
J'espère que ça aidera quelqu'un!
vous pouvez le faire facilement comme ceci en le codant en dur dans la table VR :
=SUM(IFERROR(ARRAYFORMULA(VLOOKUP(A2:A, {{"A", 6};
{"B", 5};
{"C", 4};
{"D", 3};
{"E", 2};
{"F", 1}}, 2, 0)), ))
ou vous pouvez utiliser des cellules latérales avec des règles :
=SUM(IFERROR(ARRAYFORMULA(VLOOKUP(A2:A, E2:F, 2, 0)), ))
alternatives : https://webapps.stackexchange.com/a/123741/186471