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
, pear
et B1: B3 contiennent chacun le nombre 1
. Mes cibles de recherche sont a
et 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 a
et deux également p
, ce qui donne une somme de 5
.
Comment puis-je accomplir cela sans double comptabilisation?
SUMIF
ne 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.Réponses:
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
la source
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.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>0
test.SOMMEPROD effectue les calculs sous forme de tableau avec une formule normale sans tableau.
La formule en E1 est la suivante:
la source
ISNUMBER
et les sous-termes qui y sont contenus?Je pensais vraiment que ce serait une
SUMPRODUCT(--
formule, mais je ne peux pas en faire fonctionner une. Cela devrait fonctionner si -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?
la source