VBA COUNT (Função Contar)
In this Article
Este tutorial mostrará a você como usar a função COUNT do Excel em VBA
A função COUNT do VBA é usada para contar o número de células em sua planilha que contêm valores. Ela é acessada usando o método WorksheetFunction no VBA.
WorksheetFunction COUNT
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 COUNT é uma delas.
Sub TestarFuncaoCount()
Range("D33") = Application.WorksheetFunction.Count(Range("D1:D32"))
End Sub
Você pode ter até 30 argumentos na função COUNT. Cada um dos argumentos deve se referir a um intervalo de células.
O exemplo abaixo contará quantas células estão preenchidas com valores que estão nas células D1 a D9
Sub TesteCount()
Range("D10") = Application.WorksheetFunction.Count(Range("D1:D9"))
End Sub
O exemplo abaixo contará quantos valores estão em um intervalo na coluna D e em um intervalo na coluna F. Se você não digitar o objeto Application, ele será assumido.
Sub TesteCountMultiplo()
Range("G8") = WorksheetFunction.Count(Range("G2:G7"), Range("H2:H7"))
End Sub
Atribuição de um Resultado de Contagem 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 no 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 AtribuirCount()
Dim resultado As Integer
'Atribuir a variável
resultado = WorksheetFunction.Count(Range("H2:H11"))
'Mostrar o resultado
MsgBox "O número de células preenchidas com valores é " & resultado
End Sub
COUNT 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 TestarCountRange()
Dim rng As Range
'atribuir o intervalo de células
Set rng = Range("G2:G7")
'usar o intervalo na fórmula
Range("G8") = WorksheetFunction.Count(rng)
'liberar o objeto range
Set rng = Nothing
End Sub
COUNT com Vários Objetos Range
Da mesma forma, você pode contar quantas células estão preenchidas com valores em vários Objetos Range.
Sub TestarCountMultiplosRanges()
Dim rngA As Range
Dim rngB as Range
'atribuir os intervalos de células
Set rngA = Range("D2:D10")
Set rngB = Range("E2:E10")
'usar os intervalos na fórmula
Range("E11") = WorksheetFunction.Count(rngA, rngB)
'liberar os objetos range
Set rngA = Nothing
Set rngB = Nothing
End Sub
Usando COUNTA
A função COUNT contará apenas os VALORES NUMÉRICOS nas células, não contará a célula se ela tiver texto. Para contar as células que estão preenchidas com qualquer tipo de dados, precisamos usar a função COUNTA.
Sub TestarCountA()
Range("B8") = Application.WorksheetFunction.CountA(Range("B1:B6"))
End Sub
No exemplo abaixo, a função COUNT retornaria um zero, pois não há valores na coluna B, enquanto retornaria um 4 para a coluna C. A função COUNTA, entretanto, contaria as células com texto e retornaria um valor de 5 na coluna B, enquanto ainda retornaria um valor de 4 na coluna C.
Uso de COUNTBLANK
A função COUNTBLANKS contará apenas as células em branco no intervalo de células, ou seja, células que não contêm nenhum dado.
Sub TestarCountBlank()
Range("B8") = Application.WorksheetFunction.CountBlank(Range("B1:B6"))
End Sub
No exemplo abaixo, a coluna B não tem células em branco, enquanto a coluna C tem uma célula em branco.
Uso da função COUNTIF
Outra função de planilha que pode ser usada é a função COUNTIF.
Sub TestarCountIf()
Range("H14") = WorksheetFunction.CountIf(Range("H2:H10"), ">0")
Range("H15") = WorksheetFunction.CountIf(Range("H2:H10"), ">100")
Range("H16") = WorksheetFunction.CountIf(Range("H2:H10"), ">1000")
Range("H17") = WorksheetFunction.CountIf(Range("H2:H10"), ">10000")
End Sub
O procedimento acima só contará as células com valores se os critérios forem atendidos – maior que 0, maior que 100, maior que 1000 e maior que 10000. É necessário colocar os critérios entre aspas para que a fórmula funcione corretamente.
Desvantagens da WorksheetFunction
Quando você usa a WorksheetFunction para contar os 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 mudará.
No exemplo acima, o procedimento TestarFuncaoCount contou as células da coluna H em que há valores presentes. 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 Range(H2:H12), os resultados em H14 NÃO serão alterados.
Em vez de usar a WorksheetFunction.Count, você pode usar o VBA para aplicar uma função de contagem a uma célula usando os métodos Formula ou FormulaR1C1.
Como Usar o Método Formula
O método de fórmula permite que você aponte especificamente para um intervalo de células, por exemplo: H2:H12, conforme mostrado abaixo.
Sub TestarCountFormula
Range("H14").Formula = "=Count(H2:H12)"
End Sub
Como Usar o Método FormulaR1C1
O método FromulaR1C1 é 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 TestarCountFormula()
Range("H14").Formula = "=Count(R[-11]C:R[-1]C)"
End Sub
Entretanto, para tornar a fórmula mais flexível, poderíamos alterar o código para que ficasse assim:
Sub TestarCountFormula()
ActiveCell.FormulaR1C1 = "=Count(R[-11]C:R[-1]C)"
End Sub
Onde quer que você esteja em sua planilha, a fórmula contará os valores nas 12 células diretamente acima dela e colocará a resposta em sua ActiveCell. O intervalo dentro da função COUNT 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 H14 em vez de um valor.