Renvoyer la somme de plusieurs vlookups

2

Bon, j'ai un problème que j'essaie de résoudre en une seule formule.

J'ai une configuration de tables:

ma table

Combien ai-je de NFPI (nombre de fruits x pourcentage d'intensité) pour les pommes?

Je dois analyser la colonne G du tableau 3 par rapport à la colonne B du tableau 1 pour voir quelles lignes contiennent une sorte de pomme.

Ensuite, je dois trouver le nombre total de fruits pour chaque occurrence de Apple:

(Number of trees * Tree fruit) + ground fruit

Et trouvez le nombre total de fruits dans le tableau 2 avec l’intensité en pourcentage appropriée et additionnez toutes les occurrences.

Donc, cela ressemblerait à:

(1 * 3) + 2 = 5 Red Apples. NFPI of 5 fruits at 97% intensity = 1.67  
(2 * 2) + 0 = 4 Green Apples. NFPI of 4 fruits at 98% intensity = 2  
(1 * 2) + 1 = 3 Yellow Apples. NFPI of 3 fruits at 97% intensity = 1  
**total NFPI = (1.67 + 2 + 1) = 4.67**

J'essaie de faire tout cela dans une formule. La formule que j'ai essayé d'utiliser incorpore un vlookup à une formule matricielle, mais elle ne cesse de me donner la mauvaise réponse. Voici la formule que j'ai essayée:

{=SUM(IF(ISERROR(MATCH(G12:G16,B3:B5,0))=FALSE,VLOOKUP(H12:H16,F4:K8,(I12:I16*J12:J16)+K12:K16+1),0))}

Je ne peux pas comprendre pourquoi cela ne fonctionne pas ou un moyen de le faire fonctionner. Je pensais que peut-être une formule SOMMAIRE pourrait aider, mais je ne pouvais pas comprendre cela non plus. Je sais que je pourrais simplement trouver le NFPI de chaque entrée de pomme et l'inscrire dans une autre colonne à côté de la Ground Fruitcolonne, puis simplement mettre une formule SOMME au bas de la somme pour l'additionner, mais j'essaie de trouver la somme sans le faire si possible.

Toute aide serait appréciée!

Sean
la source
Sean, j'ai finalement réussi à faire fonctionner ça comme tu le voulais. Voir ma première réponse modifiée ci-dessous.
Bandersnatch

Réponses:

1

EDIT: Une réponse récente de @ScottCraner a utilisé la INDEX()formule "dé-référencée" et sa réponse m'a incité à prendre une autre solution à ce problème. La même approche que j'avais (sans succès) essayée auparavant fonctionnait parfaitement la deuxième fois. Je décrirai la solution ci-dessous.

Contexte de la formule INDEX () dé-référencée:

Sean, vous avez fait une tentative admirable pour utiliser des formules matricielles pour faire ce que vous devez faire. Les problèmes que vous rencontrez sont liés à la façon dont Excel gère les tableaux. Certaines formules peuvent utiliser des tableaux comme arguments et d'autres non.

J'ai approfondi le sujet et appris des choses très bizarres et mystérieuses sur l'utilisation des tableaux dans la INDEX()formule d'Excel que je ne connaissais pas auparavant. Pour comprendre comment cette formule fonctionne, commençons par la fin.

La dernière chose que ferait votre formule est la somme de trois valeurs (discontinues) du tableau 2D constituant votre tableau 2.

INDEX(array,row_num,col_num)peut renvoyer une valeur unique d'un tableau 2D et peut également renvoyer une colonne ou une ligne entière. Il semble qu'il devrait pouvoir renvoyer une liste de valeurs. Alors testons-le.

Cette formule renverrait (dans un monde parfait) la somme que vous recherchez du tableau 2:

=SUM(INDEX(G4:K8,{3,2,3},{5,4,3}))

Cela devrait ajouter les éléments de la ligne 3, colonne 5 plus ligne 2, colonne 4 plus ligne 3, colonne 3. Mais ce n'est pas le cas , il renvoie simplement 1.67, qui est le premier élément référencé.

La recherche en ligne produit des références (y compris une ici sur StackOverflow ) qui indiquent INDEX()le retour d'un tableau, mais uniquement si vous dé-référencez la formule (c'est la partie "bizarre"). La partie "arcane" est comment faire cela. C'est la formule "dé-référencée":

=SUM(INDEX(G4:K8,N(IF(1,{3,2,3})),N(IF(1,{5,4,3}))))

Cette formule donne la réponse correcte: 4.67.

Dans la formule, le IF()1 est traité comme un True, il renvoie donc le tableau de nombres et le N()renvoie le nombre de chiffres s’ils sont numériques. La prédiction de quiconque se demande pourquoi IF () et N () sont nécessaires pour que la formule fonctionne correctement. Dans la formule de Scott , il devait également multiplier son tableau (il s'agissait d'une référence de plage) par 1.

Mais maintenant, nous avons une formule qui donne la bonne réponse. Et nous espérons que tout ce que nous avons à faire est de remplacer les constantes de tableau par des tableaux calculés en utilisant vos autres données.

Les nouvelles informations commencent ici.

Pour le nombre de lignes dans la formule ci {3,2,3}- dessus , nous avons besoin des positions des intensités en pourcentage dans F4: F8 associées aux variétés de fruits choisies. Premièrement, nous allons avoir un tableau des positions des pommes dans G12:G16votre tableau 3:

=MATCH(B3:B5,G12:G16,0)

Ceci est une formule matricielle et doit être entré avec CTRLShiftEnter, plutôt que juste Enter.

Cette formule recherche la liste des variétés de pommes du tableau 1 de la colonne G du tableau 3 et renvoie un tableau de leurs positions.

Si vous sélectionnez la formule dans la barre de formule et appuyez sur F9, vous verrez que la valeur de la formule est le tableau {1,3,4}, les positions des pommes dans la colonne G du tableau 3.

Nous avons maintenant besoin des IP associés à ces postes. Cette INDEX()formule recherche dans la colonne H et utilise le tableau ci-dessus comme numéro de ligne. Ici, le numéro de ligne doit être "dé-référencé":

=INDEX(H12:H16,N(IF(1,MATCH(B3:B5,G12:G16,0))))

Cette formule retourne le tableau {0.97,0.98,0.97}, les PI des pommes. Jusqu'ici tout va bien. Ensuite, nous utilisons ce tableau comme valeurs de recherche dans une MATCH()formule qui ressemble à F4: F8, l’index PI de votre tableau 2:

=MATCH(INDEX(H12:H16,N(IF(1,MATCH(B3:B5,G12:G16,0)))),F4:F8,0)

Cette formule retourne le tableau {3,2,3}, et ce sont les valeurs de row_num nécessaires à la formule finale.

Nous avons ensuite besoin du numéro de colonne {5,4,3}, qui correspond au nombre total de fruits pour chacune des variétés de pommes. Nous en tirerons le tableau 3, mais nous devons d’abord calculer le nombre total de fruits pour toutes les variétés de fruits. Ce tableau (calculé) est une liste de ces totaux:

(I12:I16*J12:J16)+K12:K16

Pour obtenir le nombre total de fruits pour les variétés Apple, nous allons utiliser ce tableau dans un INDEX(), avec le même numéro de ligne (sans référence) que précédemment:

=INDEX((I12:I16*J12:J16)+K12:K16,N(IF(1,MATCH(B3:B5,G12:G16,0))))

Cette formule retourne le tableau {5,4,3}, et ce sont les numéros de colonne nécessaires à la formule finale.

En résumé, la liste des NFPI est la suivante:

=INDEX(G4:K8,MATCH(INDEX(H12:H16,N(IF(1,MATCH(B3:B5,G12:G16,0)))),F4:F8,0),INDEX((I12:I16*J12:J16)+K12:K16,N(IF(1,MATCH(B3:B5,G12:G16,0))))

Cette formule retourne le tableau {1.67;2;1}. Ce sont les NFPI pour les pommes, et maintenant nous devons simplement les additionner.

Mais pas encore, il y a un problème mineur à régler en premier. Les trois variétés de pommes figurent dans le tableau 3, mais ce n'est pas le cas pour les oranges. Les formules ci-dessus renvoient des tableaux contenant #N/Ala variété Small Orange. Cela ne pose pas de problème tant que le temps n'est pas venu d'ajouter les valeurs.

Donc avant de prendre la somme, nous convertissons le #N/A'sà 0 avec une IFERROR()formule. Voici la formule finale:

=SUM(IFERROR(INDEX(G4:K8,MATCH(INDEX(H12:H16,N(IF(1,MATCH(C3:C5,G12:G16,0)))),F4:F8,0),INDEX((I12:I16*J12:J16)+K12:K16,N(IF(1,MATCH(C3:C5,G12:G16,0))))),0))

Cette formule renvoie 4,67 pour les pommes et 5,75 pour les oranges.

Sean, j'espère que cela peut encore être utile. Désolé pour le long délai.

Bandersnatch
la source
Wow, merci beaucoup. C'est vraiment intéressant. Je ne comprends pas tout à fait comment les trucs "de-référencement" et "mystérieux" fonctionnent dans cette formule, mais ça fonctionne comme vous l'avez dit. J'apprécie vraiment l'aide apportée jusqu'à présent. J'espère avoir de vos nouvelles!
Sean
De rien. La formule est assez étrange. IF () considère le 1 comme étant True, il renvoie donc le tableau de nombres et le N () renvoie le tableau de nombres s’ils sont des nombres, ce qu’ils sont. Pourquoi cela ne fait rien (mais fait que la formule fonctionne correctement) me dépasse.
Bandersnatch
Merci pour l'explication. Je n'avais aucune idée que les formules T () et N () existaient même; Je devais les chercher. Cela ressemble à certaines des formules originales des débuts d'Excel.
Sean
Une autre question: je comprends comment votre vlookup retourne le tableau que vous obtenez, mais comment obtenez-vous le tableau retourné à afficher dans Excel? Tout ce que j'ai est #VALUE! les erreurs. Je suppose que c'est parce qu'une cellule ne peut afficher qu'une seule valeur. Existe-t-il un moyen de convertir le tableau renvoyé en texte, puis de l'afficher dans la cellule où se trouve la formule? Généralement, je demande ceci pour référence future lorsque je rencontre un autre problème difficile que j'essaie de résoudre.
Sean
Vous savez entrer des formules matricielles avec CTRL-Maj-Entrée, non? Cela effacera souvent l'erreur #VALUE. Pour voir le tableau entier renvoyé, cliquez dans la barre de formule et mettez en surbrillance la formule (ou une partie de la formule) pour laquelle vous souhaitez voir le résultat. Appuyez sur F9 et Excel affiche la valeur de ce que vous avez mis en surbrillance. Assurez-vous d'appuyer sur CTRL-Z par la suite, sinon Excel remplace votre formule par le résultat. :-)
Bandersnatch le
1

EDIT Voir mon autre réponse sur cette page. Il se trouve que INDEX()CAN peut renvoyer une liste de valeurs (discontinues) d'un tableau.

Voici une autre façon d'accomplir ce que vous essayez de faire, même si la formule s'avère très longue.

La formule suivante recherche chacun des trois NFPI dans votre tableau 2 et les additionne.

=INDEX(G$4:K$8,MATCH(INDEX(H$12:H$16,MATCH(B3,G$12:G$16,0)),F$4:F$8,0),MATCH(INDEX(L$12:L$16,MATCH(B3,G$12:G$16,0)),G$3:K$3,0))+INDEX(G$4:K$8,MATCH(INDEX(H$12:H$16,MATCH(B4,G$12:G$16,0)),F$4:F$8,0),MATCH(INDEX(L$12:L$16,MATCH(B4,G$12:G$16,0)),G$3:K$3,0))+INDEX(G$4:K$8,MATCH(INDEX(H$12:H$16,MATCH(B5,G$12:G$16,0)),F$4:F$8,0),MATCH(INDEX(L$12:L$16,MATCH(B5,G$12:G$16,0)),G$3:K$3,0))

Fonctionnement: Chaque terme de la somme est une INDEX()fonction qui renvoie un élément de la Table 2 en spécifiant le paramètre row_num et column_num. Pour le premier terme, row_num est trouvé en premier, en utilisant un élément INDEX()qui recherche B3(pomme rouge) dans le tableau 3 et renvoie le% d'intensité associé:

INDEX(H$12:H$16,MATCH(B3,G$12:G$16,0))

Ensuite, cet IP est utilisé MATCH()pour renvoyer la bonne ligne du tableau 2:

MATCH(INDEX(H$12:H$16,MATCH(B3,G$12:G$16,0)),F$4:F$8,0)

Le numéro de colonne est trouvé en commençant par trouver le nombre correct de fruits. J'ai ajouté à votre tableau 3 une colonne supplémentaire qui calculait le nombre total de fruits en L12:L16. Si ce n'est pas une option, vous pouvez calculer le nombre de fruits "à la volée" en les remplaçant L$12:L$16par (I$12:I$16)*(J$12:J$16)+(K$12:K$16):

INDEX(L$12:L$16,MATCH(B3,G$12:G$16,0))

Quant au row_num, il est utilisé dans un MATCH()pour renvoyer la bonne ligne du tableau 2:

MATCH(INDEX(L$12:L$16,MATCH(B3,G$12:G$16,0)),G$3:K$3,0)

Maintenant que la ligne et la colonne sont connues pour Red Apple, le premier terme de la somme est:

=INDEX(G$4:K$8,MATCH(INDEX(H$12:H$16,MATCH(B3,G$12:G$16,0)),F$4:F$8,0),MATCH(INDEX(L$12:L$16,MATCH(B3,G$12:G$16,0)),G$3:K$3,0))

Les deux termes restants pour Pomme verte et Pomme jaune correspondent à la même formule, mais avec B4et B5remplacent B3.

J'espère que cela aide et bonne chance.

Bandersnatch
la source
J'apprécie l'aide homme. J'ai tendance à faire des formules extrêmement longues comme celle-ci tout le temps, alors j'ai bien aimé comprendre comment vous l'avez fait. Ma question et l'image originales fournies ci-dessus étaient des données inventées pour faciliter la compréhension. Avec les données réelles que j'utilise, l'équivalent du tableau 1 ci-dessus contient plus de 30 entrées. Je pense donc que cette solution, même si elle fonctionne, peut être excessive si elle inclut la somme de plus de 30 fonctions INDEX. Il ne semble pas possible d'utiliser l'ensemble du tableau 1 comme référence et la solution de contournement consiste à utiliser chaque entrée (B3, B4, B5 comme vous l'avez fait).
Sean
Mais j'ai voté votre réponse comme solution à la question parce que techniquement c'est une solution pour les données dans ma question initiale. À votre santé!
Sean
-2

Sur la base des informations fournies par OP et l'échantillon de formule, j'ai trouvé une solution permettant d'extraire le nom du fruit, le nombre total de fruits et le NFPI.

entrez la description de l'image ici

Formule dans la cellule A12 pour extraire le type de fruit:

=IFERROR(VLOOKUP(A2,$D$2:$H$6,1,0),"")

Formule dans D12 pour générer le tableau des pommes:

{=VLOOKUP(A2,$D$2:$H$6,{1,2,3,4,5},FALSE)}

NB: Terminez la formule avec Entrée, puis faites glisser la formule jusqu'à la colonne H et appuyez sur F2, puis Terminez cette formule avec Clrt + Maj + Entrée, puis faites-la glisser vers le bas. Vous obtenez le tableau des pommes avec d'autres valeurs.

Formule dans la cellule B12 pour trouver la valeur totale du fruit (comme OP a suggéré la formule échantillon):

`=IF(VLOOKUP(A2,$D$2:$H$6,1,0)=$D12,((F12*G12)+H12),0)`

Pour NFPI, la formule dans la cellule C12:

=(E12*IF(VLOOKUP(A2,$D$2:$H$6,1,0)=$D12,((F12*G12)+H12),0))

NB: Ceci est une formule provisoire que j'ai créée sur la base des informations trouvées dans OP. ( Si vous me montrez comment vous avez trouvé 1,67, je modifierai simplement l'équation ).

Je crois que cela vous aide.

Rajesh S
la source
Salut Rajesh, je ne suis pas sûr de savoir comment cela fonctionne. Je ne vois pas comment il utilise le tableau Intensité en pourcentage - Nombre de fruits (tableau 2 de ma photo) comme je le souhaite.
Sean
@Sean ,, j'ai résolu 2 problèmes. 1. Extrait le nom du fruit et 2. Total des fruits (comme vous l'avez montré, (1 * 3) + 2 = 5). En fait, comment vous calculez, NFPI de 5 fruits = 1,67, à ce sujet, je suis un peu confus. Si vous me montrez l'équation, je vous suggérerai une formule pour obtenir 5, puis 1,67 ensemble. Mais permettez-moi de vous rappeler que pour les 3 exercices, la formule SIMPLE n'est pas possible! - Rajesh S il y a 37 minutes
Rajesh S
@Sean ,, vérifiez que j'ai modifié ma réponse, qui calcule également NFPI. Encore une fois, je voudrais vous rappeler, à propos de NFPI, je ne comprends toujours pas comment obtenir 1,67, si vous me montrez l'équation, je pourrais modifier ma formule.
Rajesh S
Merci pour les modifications, Rajesh. Le 1,67 est une valeur du tableau 2 dans mon image.
Sean