Funções VBA COUNTIF e COUNTIFS

Este tutorial mostrará como usar as funções CONT.SE e CONT.SE do Excel no VBA

O VBA não tem um equivalente das funções COUNTIF ou COUNTIFS que você pode usar - um usuário deve usar as funções integradas do Excel no VBA usando o WorkSheetFunction objeto.

Função de planilha CONT.SE

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 CONT.SE é uma delas.

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

O procedimento acima contará apenas as células no intervalo (D2: D9) se elas tiverem um valor de 5 ou superior. Observe que, como você está usando um sinal de maior que, os critérios maiores que 5 precisam estar entre parênteses.

Atribuindo um resultado CONT.SE a uma variável

Você pode querer usar o resultado de sua fórmula em outro lugar no código, em vez de escrevê-lo diretamente de volta para o intervalo do Excel. Se for esse o caso, você pode atribuir o resultado a uma variável para usar posteriormente em seu código.

1234567 Sub AssignSumIfVariable ()Dim result as Double'Atribuir a variávelresultado = Application.WorksheetFunction.CountIf (Range ("D2: D9"), "> 5")'Mostra o resultadoMsgBox "A contagem de células com um valor maior que 5 é" & resultadoEnd Sub

Usando COUNTIFS

A função CONT.SE é semelhante à função CONT.Planeta, mas permite que você verifique mais de um critério. No exemplo abaixo, a fórmula contará o número de células em D2 a D9 onde o Preço de venda for maior que 6 E o Preço de custo for maior que 5.

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

Usando COUNTIF com um objeto Range

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

123456789 Sub TestCountIFRange ()Dim rngCount como intervalo'atribuir o intervalo de célulasDefina rngCount = Range ("D2: D9")'use o intervalo na fórmulaRange ("D10") = WorksheetFunction.SUMIF (rngCount, "> 5")'libere os objetos de alcanceDefinir rngCount = NothingEnd Sub

Usando COUNTIFS em vários objetos de intervalo

Da mesma forma, você pode usar COUNTIFS em vários objetos de intervalo.

123456789101112 Sub TestCountMultipleRanges ()Dim rngCriteria1 As RangeDim rngCriteria2 as Range'atribuir o intervalo de célulasDefina rngCriteria1 = Range ("D2: D9")Defina rngCriteria2 = Range ("E2: E10")'use os intervalos na fórmulaRange ("D10") = WorksheetFunction.CountIfs (rngCriteria1, "> 6", rngCriteria2, "> 5")'libere os objetos de alcanceDefinir rngCriteria1 = NadaDefinir rngCriteria2 = NadaEnd Sub

Fórmula CONT.SE

Quando você usa o WorksheetFunction.COUNTIF para adicionar uma soma a um intervalo em sua planilha, um valor estático é retornado, não uma fórmula flexível. Isso significa que quando seus números no Excel mudam, o valor que foi retornado pelo WorksheetFunction não mudará.

No exemplo acima, o procedimento contou a quantidade de células com valores em Intervalo (D2: D9) onde o Preço de venda é maior que 6 e o ​​resultado foi colocado em D10. Como você pode ver na barra de fórmulas, esse resultado é uma figura e não uma fórmula.

Se algum dos valores mudar no intervalo (D2: D9), o resultado em D10 NÃO mudança.

Em vez de usar o WorksheetFunction.SumIf, você pode usar o VBA para aplicar uma função SUMIF a uma célula usando o Fórmula ou FormulaR1C1 métodos.

Método de Fórmula

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

123 Sub TestCountIf ()Intervalo ("D10"). FormulaR1C1 = "= CONT.SE (D2: D9," "> 5" ")"End Sub

Método FormulaR1C1

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

123 Sub TestCountIf ()Intervalo ("D10"). FórmulaR1C1 = "= CONT.SE (R [-8] C: R [-1] C," "> 5" ")"End Sub

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

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

Onde quer que você esteja em sua planilha, a fórmula contará as células que atendem aos critérios diretamente acima dela e colocará a resposta em seu ActiveCell. O intervalo dentro da função CONT.SE deve ser referido usando a sintaxe de linha (R) e coluna (C).

Ambos os métodos permitem que você use fórmulas do Excel Dinâmico no VBA.

Haverá agora uma fórmula em D10 em vez de um valor.

O texto do seu link

wave wave wave wave wave