Funções COUNTIF e COUNTIFS no VBA

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on May 22, 2022

Este tutorial irá lhe mostrar como você pode usar a função COUNT IF e COUNTIFS no VBA.

O VBA não te funções equivalentes às Funções do Excel COUNTIF ou COUNTIFS. No entanto, você pode chamá-las usando o objeto WorkSheetFunction.

COUNTIF WorksheetFunction

O objeto WorksheetFunction pode ser utilizado para chamar a maioria das funções internas do Excel que estão disponíveis na Caixa de Diálogo Inserir Função no Excel. A função COUNTIF é uma delas.

Sub TesteCountIf()
   Range("D10") = Application.WorksheetFunction.CountIf(Range("D2:D9"), ">5")
End Sub

O procedimento acima irá contar somente as células no Intervalo Range(D2:D9) se eles tiverem um valor que seja igual ou maior que of 5.  Perceba que, por estar usando o sinal > (maior que), o critério > 5 (maior que 5) precisa estar entre parênteses.

vba countif exemplo

Atribuindo o Resultado da Função COUNTIF a uma Variável

Pode ser que você queira utilizar o resultado da sua fórmula em outro lugar no código ao invés de escrevê-lo diretamente em um intervalo no Excel. Se este for o caso, você pode atribuir o resultado a uma variável para usá-la posteriormente no seu código.

Sub AtribuirCountIfParaVariavel()
   Dim resultado as Double
'Atribui a variável resultado
   resultado = Application.WorksheetFunction.CountIf(Range("D2:D9"), ">5")
'Exibe o resultado
  MsgBox "A contagem das células com valor maior que 5 é " &  resultado
End Sub

vba countif variável

Usando a Função COUNTIFS

A função COUNTIFS é similar a função COUNTIF do Excel mas ela lhe permite checar mais de um critério. No exemplo abaixo, a formula irá contar o número de células do intervalo D2 a D9 onde o Preço seja maior que 6 e o Custo seja menor que 5.

Sub UsandoCountIfs()
   Range("D10") = WorksheetFunction.CountIfs(Range("C2:C9"), ">6", Range("E2:E9"), ">5")
End Sub

vba countifs exemplo

Usando COUNTIF com um Objeto Range

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

Sub TesteCountIFRange()
   Dim rangeCount as Range
'Atribui um intervalo de células à variável rangeCount
   Set rangeCount = Range("D2:D9")
'Usa o intervalo na fórmula
   Range("D10") = WorksheetFunction.COUNTIF(rangeCount, ">5")
'Libera a memória utilizada pelo objeto Range
  Set rangeCount = Nothing
End Sub

vba countif intervalo exemplo

Usando a Função COUNTIFS em Múltiplos Objetos Range

De modo similar, você pode usar a função COUNTIFS em múltiplos Objetos Range.

Sub TesteContarMultiplosRanges() 
   Dim rangeCriterio1 As Range 
   Dim rangeCriterio2 as Range

'Atribui os intervalos às variáveis 
   Set rangeCriterio1 = Range("D2:D9")
   Set rangeCriterio2 = Range("E2:E10")
   
'Usa os variáveis range na fórmula
  Range("D10") = WorksheetFunction.CountIfs(rangeCriterio1, ">6", rangeCriterio2, ">5")

'Libera a memória utilizada pelos objetos range
  Set rangeCriterio1 = Nothing 
  Set rangeCriterio2 = Nothing
End Sub

Fórmula COUNTIF

Quando você utilizada a função WorksheetFunction.COUNTIF para adicionar uma soma a um intervalo na sua planilha, um valor estático é retornado, não uma fórmula flexível. Na prática, isso significa que quando os valores no Excel mudarem, o valor que foi retornado pela WorksheetFunction não irá mudar.

vba countif estático

No exemplo acima, o procedimento contou o total de células no intervalo Range(D2:D9) onde o Preço é maior que 6, e o resultado foi colocado na célula D10. Como você pode ver na barra de fórmula, este resultado é um valor e não uma fórmula.

Se qualquer um dos valores mudarem no intervalo Range (D2:D9), o resultado em D10 NÃO irá mudar.

Ao invés de usar o WorksheetFunction.COUNTIF, você pode usar o VBA para aplicar a função COUNTIF a uma célula usando os métodos Formula or FormulaR1C1.

Método Formula

O método Formula lhe permite apontar de forma específica para um intervalo de células, ou seja: D2:D9 como mostrado abaixo.

Sub TestCountIf()
  Range("D10").Formula ="=COUNTIF(D2:D9, "">5"")"
End Sub

vba countif formula ranges

 

Método FormulaR1C1

O método FormulaR1C1 é mais flexível uma vez que ele não lhe restringe a um intervalo de células específico. O exemplo abaixo irá lhe dar a mesma resposta que o exemplo anteior.

Sub TestCountIf()
   Range("D10").FormulaR1C1 = "=COUNTIF(R[-8]C:R[-1]C,"">5"")"
End Sub

No entanto, para deixar a fórmula ainda mais flexível,  poderíamos alterar o código para ficar assim:

Sub TestCountIf() 
   ActiveCell.FormulaR1C1 = "=COUNTIF(R[-8]C:R[-1]C,"">5"")"
End Sub

Onde quer que você esteja na sua planilha, a fórmula irá contar as células diretamente acima que satisfazem o critério e colocar o resultado na sua ActiveCell. O intervalo Range dentro da função COUNTIF precisa ser referenciado usando a sintaxe de Linha (R) e Coluna (C).

Ambos os métodos lhe permitem usar Fórmulas Dinâmicas do Excel dentro do VBA.

Perceba que, no exemplo abaixo, haverá uma fórmula na célula D10, ao invés de um valor estático.

vba countif formula

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