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)))