Bon, j'ai un problème que j'essaie de résoudre en une seule formule.
J'ai une configuration de tables:
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 Fruit
colonne, 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!
Réponses:
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 unTrue
, il renvoie donc le tableau de nombres et leN()
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 dansG12:G16
votre 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 uneMATCH()
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/A
la 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 uneIFERROR()
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.
la source
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.
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émentINDEX()
qui rechercheB3
(pomme rouge) dans le tableau 3 et renvoie le% d'intensité associé:Ensuite, cet IP est utilisé
MATCH()
pour renvoyer la bonne ligne du tableau 2: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çantL$12:L$16
par(I$12:I$16)*(J$12:J$16)+(K$12:K$16)
:Quant au row_num, il est utilisé dans un
MATCH()
pour renvoyer la bonne ligne du tableau 2:Maintenant que la ligne et la colonne sont connues pour Red Apple, le premier terme de la somme est:
Les deux termes restants pour Pomme verte et Pomme jaune correspondent à la même formule, mais avec
B4
etB5
remplacentB3
.J'espère que cela aide et bonne chance.
la source
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.
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:
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):
Pour NFPI, la formule dans la cellule C12:
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.
la source