Somme des valeurs pour les entrées qualifiantes sans double comptabilisation dans Excel

1

J'ai une collection de chaînes de texte qui ont chacune une valeur numérique associée. Je dois faire la somme des valeurs numériques associées pour les entrées "qualifiées". Une entrée de texte est qualifiée en contenant une ou plusieurs chaînes cibles désignées. Une entrée peut éventuellement contenir plusieurs chaînes cibles ou une chaîne cible plusieurs fois. Cependant, je veux seulement additionner la valeur associée une fois pour l'entrée si l'entrée est admissible en contenant une correspondance avec l'une des cibles ou combinaisons de cibles.

Par exemple, disent les cellules A1: A3 contiennent respectivement apple, banana, pearet B1: B3 contiennent chacun le nombre 1. Mes cibles de recherche sont aet p. Les trois entrées de texte sont qualifiées car elles contiennent chacune au moins une instance d'au moins une des cibles. La somme des valeurs associées dans la colonne B devrait renvoyer un résultat de 3.

J'ai essayé ceci en utilisant des cibles SUMIF et génériques. Ma formule pour cet exemple est la suivante:

=SUM(SUMIF(A:A, {"*a*", "*p*"}, B:B))

Toutefois, cela compte en double les entrées correspondant à plusieurs cibles. Dans ce cas, les trois contiennent aet deux également p, ce qui donne une somme de 5.

Comment puis-je accomplir cela sans double comptabilisation?

Ninjakannon
la source
1
SUMIFne compte pas le texte. Et avec une constante de tableau pour les critères, vous n'obtiendrez pas un bon résultat avec votre formule lorsque vous la présenterez. De plus, les variables ne peuvent pas être utilisées dans une constante de tableau. Fournir un exemple réel de vos données, formules, résultats réels et attendus serait plus utile. Ajoutez ceci en modifiant votre question, pas en ajoutant un commentaire.
Ron Rosenfeld
Je trouve cette question très intéressante. J'espère que d'excellents sorciers se présenteront à la table et la feront tomber du parc.
Raystafarian
J'ai
modifié
@ Raystafarian Je ne comprends pas votre montage. Sans caractère générique, je pensais que votre exemple renverrait 0. Essayez-vous de fournir un exemple de réussite du décompte? J'essayais de donner un exemple du cas d'échec.
Ninjakannon
Il est utile de donner un exemple réussi. Sont les caractères génériques dans la recherche ou cherchez-vous dans les cellules "génériques" - ce n'était pas clair.
Raystafarian

Réponses:

1

Il est plus flexible d’avoir vos critères dans les cellules réelles de la feuille de calcul plutôt que dans la formule codée en dur.

Si vous utilisez une plage de cellules contiguës et verticales (par exemple H1:H2) à cette fin, et en supposant que Range est une plage verticale , vous pouvez utiliser cette formule matricielle ** :

=SUM(IF(MMULT(0+ISNUMBER(SEARCH(TRANSPOSE(Criteria),Range)),ROW(Criteria)^0)>0,Values))

Si vous insistez pour que les critères soient dans la formule, alors:

=SUM(IF(MMULT(0+ISNUMBER(SEARCH({"p","a"},Range)),{1;1})>0,Values))

Cordialement

XOR LX
la source
1
Cette solution fonctionne, mais pour ceux qui ne sont pas des experts Excel, ils auraient du mal à comprendre comment et pourquoi cela fonctionne, ou à l'adapter à un problème spécifique. Pour être utile, il faut vraiment un exemple de travail réel et quelques explications.
Fix1234
1

Voici une solution relativement simple. Avec toutes les valeurs associées 1, cela produit le résultat souhaité 3, mais j’ai assigné différentes valeurs pour démontrer que les valeurs correctes sont sélectionnées et incluait une entrée ne correspondant pas pour une bonne mesure.

entrez la description de l'image ici

La liste des entrées est dans la colonne C et leurs valeurs associées dans la colonne D. Le résultat est dans E1.

Seules certaines fonctions peuvent utiliser des caractères génériques. Cette méthode utilise donc SEARCH pour la chaîne cible.

La méthode typique de traitement de plusieurs critères OR consiste à ajouter les résultats de chaque test. Toutefois, cela compte en double lorsque les éléments peuvent répondre à plusieurs critères. Pour résoudre ce problème, les tests de critères agrégés sont vérifiés pour voir si la somme est supérieure à zéro et c'est ce qui est utilisé avec la valeur associée.

La manipulation des chaînes de recherche cible comme un tableau devient compliquée, car les fonctions communes utilisées pour ces types de formules calculent un résultat pour le tableau entier avant de l'appliquer au terme suivant. J'ai donc traité chaque critère séparément. Pour plus de critères, ajoutez-en un autre ISNUMBER(SEARCH("target",range))pour chacun d'entre eux entre les parenthèses avant le >0test.

SOMMEPROD effectue les calculs sous forme de tableau avec une formule normale sans tableau.

La formule en E1 est la suivante:

=SUMPRODUCT(((ISNUMBER(SEARCH("p",C1:C4))+ISNUMBER(SEARCH("a",C1:C4)))>0)*D1:D4)
fix1234
la source
Merci pour votre réponse! C'est vraiment utile. Est-il possible de généraliser votre requête pour un nombre non-trivial de termes de recherche, c'est-à-dire pour éviter de dupliquer les répétitions ISNUMBERet les sous-termes qui y sont contenus?
Ninjakannon
@Ninjakannon, malheureusement, cette approche nécessite une entrée de formule pour chaque cible. Si vous en avez un grand nombre, la réponse de XOR LX le traitera comme une liste de cibles, elle sera donc plus évolutive.
fixer1234
0

Je pensais vraiment que ce serait une SUMPRODUCT(--formule, mais je ne peux pas en faire fonctionner une. Cela devrait fonctionner si -

=SUM(IF(FREQUENCY(IF(NOT(ISERR(SEARCH({"d","g"},A2:A10))),ROW(A2:A10)),ROW(A2:A10))>0,1))

Où le {"d","g"}sera votre tableau de chaînes de recherche.

C'est une formule matricielle, donc une fois que vous l'avez insérée, vous devez appuyer sur ctrl+ shft+ entret les accolades doivent apparaître dans la barre de formule autour de la fonction entière.

Notez que cela ne fonctionnera que si vous recherchez une seule colonne.

Il est possible que cela ne fonctionne pas aussi bien avec les caractères génériques. Peut-être que vous avez besoin de regex?

Raystafarian
la source
Sept couches ne peuvent pas suffire. Plus profond! Plus profond!
JaredT
Je ne pense pas que cela remplisse le défi de la question. Cela ne résume pas les valeurs associées, et je ne pense pas que vous puissiez y arriver en traitant les termes de recherche comme un tableau, du moins sans approche matricielle comme dans la réponse de XOR LX.
Fix1234