Tenho uma linha de valores e quero encontrar a média dos 3 primeiros, sem contar as células em branco. Exemplo:
ABCDEFG 12 em branco 8 em branco 7 9 4
A média das 3 primeiras células não vazias deve ser 9, mas não consigo encontrar uma fórmula que calcule isso para mim. Alguém pode ajudar?
Responder1
EmA2digitar:
=IF(A1="",0,1)
e emB2digitar:
=IF(OR(B1="",SUM($A$2:A2)=3),0,1)
e copie. Então em outra célula digite:
=SUMPRODUCT((1:1)*(2:2))/3
Responder2
Você está procurando oMÉDIAfunção. De acordo com a fórmulasintaxe e usopara a função MÉDIA do Excel:
Se um argumento de referência de intervalo ou célula contiver texto, valores lógicos,ou células vazias, esses valores são ignorados; no entanto, as células com valor zero são incluídas.
A fórmula =AVERAGE(A1:E1)
retorna 9
:
Responder3
Solução 1
Força bruta: A média que você deseja pode ser calculada por:
=SE(CONTAR($A1:$C1)=3, MÉDIA($A1:$C1), SE(CONTAR($A1:$D1)=3, MÉDIA($A1:$D1), SE(CONTAR($A1:$E1)=3, MÉDIA($A1:$E1), SE(CONTAR($A1:$F1)=3, MÉDIA($A1:$F1), SE(CONTAR($A1:$G1)=3, MÉDIA($A1:$G1), "ops"))))) (Versão de linha única:) =IF(COUNT($A1:$C1)=3, AVERAGE($A1:$C1), IF(COUNT($A1:$D1)=3, AVERAGE($A1:$D1 ), SE(CONTAR($A1:$E1)=3, MÉDIA($A1:$E1), SE(CONTAR($A1:$F1)=3, MÉDIA($A1:$F1), SE(CONTAR( $A1:$G1)=3, MÉDIA($A1:$G1),"ops")))))
que procura o subconjunto inicial mais curto da linha que contém três números e calcula a média disso. Isso se torna não apenas estranho para um grande número de colunas, mas pode falhar rapidamente, pois (acredito) IF()
tem um limite de aninhamento bastante baixo.
Solução 1.9
Delicadeza.
Eu chamo isso de “1,9” porque ainda não está pronto. A expressão
SMALL(IF(ISNUMBER($A1:$G1),COLUMN($A1:$G1),""), {1,2,3})
(usado em uma fórmula de matriz) encontra os números das colunas dos três primeiros números na linha 1. O
IF(ISNUMBER($A1:$G1),COLUMN($A1:$G1),"")
parte avalia como
IF( {TRUE,FALSE,TRUE,FALSE,TRUE,TRUE,TRUE}, {1,2,3,4,5,6,7}, "" )
que reduz para
{ 1, "", 3, "", 5, 6, 7 }
e SMALL(…, {1,2,3})
dos acima produz { 1, 3, 5 }
. Deveria ser uma simples questão de dizer
=AVERAGE(INDEX($A7:$G7, 1, SMALL(IF(ISNUMBER($A7:$G7),COLUMN($A7:$G7),""),{1,2,3})))
ou
=AVERAGE(OFFSET($A7:$G7, 1, SMALL(IF(ISNUMBER($A7:$G7),COLUMN($A7:$G7),""),{1,2,3})))
mas eles retornam o valor de A1
(12) ou um erro ( #DIV/0!
ou #REF!
). Não consigo descobrir como terminar isso.