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