Fonction Excel qui calcule la moyenne en excluant d'abord tous les zéros, puis en excluant les valeurs minimale et maximale

0

J'ai environ 300 valeurs sur une feuille de calcul Excel (dont beaucoup sont nulles) et je souhaite calculer la moyenne en excluant les zéros, la valeur la plus élevée et la valeur la plus faible après zéro. Quelle serait la formule appropriée?

Merci d'avance.

edit: Ce que j'ai essayé jusqu'à présent

En supposant que mes valeurs soient en A1: A300, j’ai fait ce qui suit:

=AVERAGEIFS(A1:A100, A1:A100, "<>0", A1:A100, "<>SMALL(A1:A100, COUNTIF(A1: A100,0)+1)", A1:A100, "<>LARGE(A1: A100, COUNTIF(A1: A100))")

Il supprime avec succès les zéros, mais pas le maximum ni le minimum.

user3396592
la source
Qu'avez-vous déjà essayé? A quel moment êtes-vous resté bloqué?
Hennes
En supposant que mes valeurs soient en A1: A300, j’ai fait ce qui suit: = AVERAGEIFS (A1: A100, A1: A100, "& lt; & gt; 0", A1: A100, "& lt; & gt; SMALL (A1: A100, COUNTIF (A1 : A100,0) +1) ", A1: A100," & Lt;> LARGE (A1: A100, COUNTIF (A1: A100)) "). Il supprime avec succès les zéros, mais pas le maximum ni le minimum.
user3396592
Si votre table contient les valeurs suivantes, 1, 5, 9, 12, 3, 0, 0, 0, 30, alors vous voulez une moyenne de 5, 9, 12 et 3 qui serait 7,25. J'ai exclu les 0, 1 comme c'était la valeur la plus basse et 30 comme c'était la plus haute. De plus, que se passe-t-il si vous avez plusieurs valeurs égales aux nombres les plus élevés ou les plus bas? Donc, si j'avais les mêmes numéros ci-dessus mais avec deux autres 30 (1, 5, 9, 12, 3, 0, 0, 0, 30, 30, 30), est-ce que j'ignorerais tous les 30 ou juste celui-là?
Kevin Anthony Oppegaard Rose
@ user3396592. N'hésitez pas à utiliser le modifier lien pour ajouter cela à la publication plutôt que dans un commentaire. De plus, que se passe-t-il si 0 est la valeur la plus basse?
Hennes
Dans `" & lt; & gt; SMALL (A1: A100, COUNTIF (A1: A100,0) +1) "` le SMALL(A1:A100, COUNTIF(A1: A100,0)+1) n'est pas évalué mais considéré comme une chaîne. En utilisant & résout au moins un problème: "" & lt; & gt; "& SMALL (A1: A100, COUNTIF (A1: A100,0) +1)".
daniel.neumann

Réponses:

2

Je suppose que le résultat doit être imprimé dans une cellule sans utiliser d’autres cellules pour l’impression des résultats intermédiaires. Cela ne fonctionne probablement qu'avec des formules matricielles, du code VBA ou des requêtes de base de données (réponse de vembutech ).

Formules de tableau

Voir Instructions et exemples de formules matricielles et Créer une formule matricielle pour plus de détails.

Une solution

Dans mon exemple, les valeurs à calculer sont dans les cellules de la grille A1 à A11.

Cette formule résout le problème:

=AVERAGE(IF((A1:A11=MAX(A1:A11))+(A1:A11=MIN(IF($A$1:$A$11=0,"",$A$1:$A$11)))+(A1:A11=0),"",A1:A11))

après l'avoir inséré, vous devez taper CTRL + DÉCALAGE + ENTRER (pas seulement ENTRER , voir Créer une formule matricielle ).

Idée derrière cette solution

le AVERAGE fonction (autre que AVERAGEA ) calcule la valeur moyenne de toutes les cellules contenant un nombre. Les cellules contenant une chaîne ou un booléen / logique sont ignorées. Nous allons: définir ces cellules sur "" (chaîne vide), ce qui correspond à 0, à la valeur de cellule minimale (0 exclu) ou à la valeur de cellule maximale. Fondamentalement, nous utilisons cette formule:

=AVERAGE(IF(_TODO_,"",A1:A11))

Maintenant, nous devons remplacer le FAIRE par un certain contenu (les trois situations décrites). Ces trois situations sont testées par:

A1:A11=MAX(A1:A11)
A1:A11=MIN(IF($A$1:$A$11=0,"",$A$1:$A$11))
A1:A11=0

Le deuxième test est un peu délicat: nous voulons exclure le «0» (zéro) du calcul de la valeur minimale. le MIN fonction ignore toutes les valeurs autres que des nombres (par exemple, une chaîne vide ""). le IF($A$1:$A$11=0,"",$A$1:$A$11) définit toutes les cellules sur "" qui sont égales à zéro. Toutes les cellules restantes conservent leurs valeurs d'origine.

Maintenant, nous combinons les trois tests. Ceci est fait en mettant des parenthèses autour des trois tests et en les combinant par un +, ce qui représente une logique OR.

(A1:A11=MAX(A1:A11))+(A1:A11=MIN(IF($A$1:$A$11=0,"",$A$1:$A$11)))+(A1:A11=0)

Ce test combiné est maintenant renseigné dans notre formule en haut, remplaçant _TODO_:

=AVERAGE(IF((A1:A11=MAX(A1:A11))+(A1:A11=MIN(IF($A$1:$A$11=0,"",$A$1:$A$11)))+(A1:A11=0),"",A1:A11))

Une autre solution

Basé sur utilisateur3396592 L'approche on peut aussi écrire:

=AVERAGEIFS(A1:A11,A1:A11,"<>0",A1:A11,"<>"&MAX(A1:A11), A1:A11,"<>"&MIN(IF($A$1:$A$11=0,"",$A$1:$A$11)))
daniel.neumann
la source
-2

Espérons que le formulaire ci-dessous répondra à vos besoins,

= QUERY (A: A, "sélectionnez avg (A) où A> 0")

Supposons, par exemple, que si vous avez 100 numéros de lignes zéro sur 300, cela ignorera les 100 lignes et calculera la moyenne pour les 200 lignes restantes.

vembutech
la source
Merci, mais comment alors exclure les valeurs minimale et maximale?
user3396592
1
Je ne suis pas au courant d'un QUERY fonctionne dans Excel 2010, pourriez-vous l'expliquer un peu plus?
Máté Juhász
@ user3396592 Je ne pouvais pas faire fonctionner cette fonction non plus. Mais si cela fonctionnait: il utilise la syntaxe SQL. La bonne instruction select pourrait être quelque chose comme SELECT AVG(A) WHERE (A > 0) AND (A <> (SELECT MAX(A))) AND (A <> (SELECT MIN(A) WHERE A <> 0));.
daniel.neumann