VBA Média – AVERAGE, AVERAGEA, AVERAGEIF

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on May 26, 2023

Este tutorial demonstrará como usar a função Média do Excel no VBA.

A função MÉDIA do Excel é usada para calcular uma média a partir de um intervalo de células em sua planilha que contenha valores. No VBA, ela é acessada usando o método WorksheetFunction.

AVERAGE WorksheetFunction

O objeto WorksheetFunction pode ser usado para chamar a maioria das funções do Excel que estão disponíveis na caixa de diálogo Inserir função no Excel. A função AVERAGE é uma delas.

Sub TestarFuncao()
  Range("D33") = Application.WorksheetFunction.Average(Range("D1:D32"))
End Sub

argumentos funcao media

Você pode ter até 30 argumentos na função AVERAGE. Cada um dos argumentos deve se referir a um intervalo de células.

O exemplo abaixo produzirá a média dos valores das células B11 a N11

Sub TestarMedia()
   Range("O11") = Application.WorksheetFunction.Average(Range("B11:N11"))
End Sub

O exemplo abaixo produzirá uma média dos valores das células de B11 a N11 e os valores das células de B12:N12. Se você não digitar o objeto Application, ele será assumido.

Sub TestarMedia()
  Range("O11") = WorksheetFunction.Average(Range("B11:N11"),Range("B12:N12")) 
End Sub

Atribuir o Resultado de AVERAGE a uma Variável

Talvez você queira usar o resultado da fórmula em outro lugar do código, em vez de gravá-lo diretamente de volta em um intervalo do Excel. Se esse for o caso, você poderá atribuir o resultado a uma variável para usá-lo posteriormente em seu código.

Sub AtribuirMedia()
   Dim result As Integer
'atribuir a variavel   
   result = WorksheetFunction.Average(Range("A10:N10"))
'Mostrar o resultado
   MsgBox "A média das células nesse intervalo é " & result
End Sub

resultado calculado media

AVERAGE com um Objeto Range

Você pode atribuir um grupo de células ao objeto Range e, em seguida, usar esse objeto Range com o objeto WorksheetFunction.

Sub TestarMediaRange()
   Dim rng As Range
'atribuir o intervalo de células
   Set rng = Range("G2:G7")
'usar o range na fórmula
   Range("G8") = WorksheetFunction.Average(rng)
'liberar o objeto range
  Set rng = Nothing
End Sub

AVERAGE de Vários Objetos Range

Da mesma forma, você pode calcular a média das células de vários Objetos Range.

Sub TestarMediaMultiplosRanges() 
   Dim rngA As Range 
   Dim rngB as Range
'atribuir o intervalo de células
   Set rngA = Range("D2:D10") 
   Set rngB = Range("E2:E10")   
'usar o intervalo na fórmula 
Range("E11") = WorksheetFunction.Average(rngA, rngB)
 'liberar os objetos range
  Set rngA = Nothing 
  Set rngB = Nothing
End Sub

Uso da AVERAGEA

A função AVERAGEA difere da função AVERAGE porque cria uma média de todas as células em um intervalo, mesmo que uma das células contenha texto – ela substitui o texto por um zero e o inclui no cálculo da média. A função AVERAGE ignoraria essa célula e não a levaria em conta no cálculo.

Sub TestarAverageA()
   Range("B8") = Application.WorksheetFunction.AverageA(Range("A10:A11")) 
End Sub

No exemplo abaixo, a função AVERAGE retorna um valor diferente da função AVERAGEA quando o cálculo é usado nas células A10 a A11

exemplo media a

A resposta para a fórmula MÉDIAA (AVERAGEA)é menor do que a fórmula MÉDIA (AVERAGE), pois ela substitui o texto em A11 por um zero e, portanto, calcula a média de 13 valores em vez dos 12 valores que a MÉDIA (AVERAGE) está calculando.

Como Usar AVERAGEIF

A função AVERAGEIF (MÉDIASE) permite calcular a média dos valores de um intervalo de células que atendem a um determinado critério.

Sub ExemploAverageIf()
   Range("E33") = WorksheetFunction.AverageIf(Range("D5:D30"), "Poupança", Range("E5:E30"))
End Sub

O procedimento acima calculará a média apenas das células do intervalo E5:E30 em que a célula correspondente na coluna D tiver a palavra “Poupança”. Os critérios que você usar devem estar entre aspas.

banco meio norte

Desvantagens da WorksheetFunction

Quando você usa a WorksheetFunction para calcular a média dos valores em um intervalo na planilha, é retornado um valor estático, não uma fórmula flexível. Isso significa que, quando seus números no Excel mudarem, o valor retornado pela WorksheetFunction não será alterado.

media sem formula

No exemplo acima, o procedimento TestarMedia criou a média de B11:M11 e colocou a resposta em N11. Como você pode ver na barra de fórmulas, esse resultado é um número e não uma fórmula.

Portanto, se algum dos valores for alterado no intervalo (B11:M11), os resultados em N11 NÃO serão alterados.

Em vez de usar a WorksheetFunction.Average, você pode usar o VBA para aplicar a função AVERAGE a uma célula usando os métodos Formula ou FormulaR1C1.

Uso do Método Formula

O método de fórmula permite que você aponte especificamente para um intervalo de células, por exemplo: B11:M11, conforme mostrado abaixo.

Sub TestAverageFormula()
  Range("N11").Formula = "=Average(B11:M11)"
End Sub

vba average formula

Como Usar o Método FormulaR1C1

O método FomulaR1C1 é mais flexível, pois não o restringe a um intervalo definido de células. O exemplo abaixo nos dará a mesma resposta que o anterior.

Sub TestarMediaFormula()
   Range("N11").Formula = "=Average(RC[-12]:RC[-1])"
End Sub

media com formula

Entretanto, para tornar a fórmula mais flexível, poderíamos alterar o código para que ficasse assim:

Sub TestarMediaAverageFormula() 
   ActiveCell.FormulaR1C1 = "=AVERAGE(RC[-12]:RC[-1])"
End Sub

Onde quer que você esteja em sua planilha, a fórmula calculará a média dos valores nas 12 células diretamente à esquerda dela e colocará a resposta em sua ActiveCell. O intervalo dentro da função AVERAGE deve ser referenciado usando a sintaxe de linha (R) e coluna (C).

Esses dois métodos permitem que você use fórmulas dinâmicas do Excel no VBA.

Agora haverá uma fórmula em N11 em vez de um valor.

vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA