Contador VBA

Contador Excel VBA

Existem várias funções no MS Excel para contar valores, seja uma string, números. A contagem pode ser feita com base em alguns critérios. As funções incluem COUNT, COUNTA, COUNTBLANK, COUNTIF e COUNTIFS no Excel. Porém, essas funções não podem realizar algumas tarefas como contar as células com base em sua cor, contar apenas valores em negrito, etc. Por isso vamos criar um contador em VBA para que possamos contar esses tipos de tarefas no excel.

Vamos criar algum contador no Excel VBA.

Exemplos de Contador VBA Excel

Você pode baixar este modelo de contador VBA aqui - modelo de contador VBA em Excel

Abaixo estão alguns exemplos do contador em VBA.

Exemplo 1

Suponha que temos dados como acima para 32 linhas. Criaremos um contador VBA, que contará os valores maiores que 50 e mais um contador para contar os valores menores que 50. Criaremos o código VBA desta forma para que o usuário possa ter dados para linhas ilimitadas no Excel.

Para fazer o mesmo, as etapas seriam:

Certifique-se de que a  guia Desenvolvedor do Excel esteja visível. Para tornar a guia visível (se não), as etapas são:

Clique na guia 'Arquivo' na faixa e escolha 'Opção' na lista.

Escolha ' Personalizar Faixa de Opções' na lista, marque a caixa para 'Desenvolvedor' e clique em OK .

Agora a guia 'Desenvolvedor' está visível.

Insira o botão de comando usando o comando 'Inserir' disponível no grupo 'Controles' na guia 'Desenvolvedor' .

Enquanto pressiona a tecla ALT , crie o botão de comando com o mouse. Se continuarmos pressionando a tecla ALT , as bordas do botão de comando irão automaticamente com a borda das células.

Clique com o botão direito do mouse no botão de comando para abrir o menu contextual (certifique-se de que o 'Modo Design' esteja ativado, caso contrário, não poderemos abrir o menu contextual).

Escolha 'Propriedades' no menu.

Altere as propriedades do botão de comando, ou seja, Nome, Legenda e Fonte, etc.

Clique com o botão direito novamente e escolha 'Exibir código' no menu contextual.

O Editor do Visual Basic está aberto agora e, por padrão, uma sub-rotina já foi criada para o botão de comando.

Vamos escrever o código agora. Declararemos 3 variáveis. Um para fins de loop, um para contar e um para armazenar o valor da última linha.

Usaremos o código para selecionar a célula A1 e então a região atual da célula A1 e então descer para a última linha preenchida para obter o número da última linha preenchida.

Executaremos um loop 'for' no VBA para verificar os valores escritos na célula A2 para a última célula preenchida na coluna A. Iremos aumentar o valor da variável 'contador' em 1 se o valor for maior que 50 e mudaremos a cor da fonte da célula para 'Azul' e se o valor for menor que 50 então a cor da fonte da célula seria 'Vermelho' .

Depois de verificar e contar, precisamos exibir os valores. Para fazer o mesmo, usaremos 'VBA MsgBox'.

Código:

 Private Sub CountingCellsbyValue_Click () Dim i, counter As Integer Dim lastrow As Long lastrow = Range ("A1"). CurrentRegion.End (xlDown) .Row For i = 2 to lastrow If Cells (i, 1). counter = counter + 1 Cells (i, 1) .Font.ColorIndex = 5 Else Cells (i, 1) .Font.ColorIndex = 3 End If Next i MsgBox "Existem" & counter & "valores que são maiores que 50" & _ vbCrLf & "Existem" & lastrow - counter & "valores que são menores que 50" End Sub 

Desative o 'Modo Design' e clique no 'Botão de comando' . O resultado seria o seguinte.

Exemplo # 2

Suponha que desejemos criar o contador de tempo usando o Excel VBA da seguinte maneira:

Se clicarmos no botão 'Iniciar' , o cronômetro inicia e se clicarmos no botão 'Parar' , o cronômetro para.

Para fazer o mesmo, as etapas seriam:

Crie um formato como este em uma planilha do Excel.

Altere o formato da célula A2 como 'hh: mm: ss' .

Mescle as células C3 a G7 usando o  comando Merge and Center Excel no grupo 'Alignment' na guia 'Home' .

Forneça a referência da célula A2 apenas para a célula mesclada e, em seguida, faça a formatação, como tornar o estilo da fonte em 'Baskerville' , o tamanho da fonte em 60, etc.

Crie dois botões de comando 'Iniciar' e 'Parar' usando o comando 'Inserir' disponível no grupo 'Controles' na guia 'Desenvolvedor' .

Usando o comando 'Propriedades' disponível no grupo 'Controles' na guia 'Desenvolvedor' , altere as propriedades.

Selecione os botões de comandos um por um e escolha o comando 'Exibir código' do grupo 'Controles' na guia 'Desenvolvedor' para escrever o código como segue.

Escolha no menu suspenso o botão de comando apropriado.

Insert a module into ‘ThisWorkbook‘ by right-clicking on the ‘Thisworkbook’ and then choose ‘Insert’ and then ‘Module’.

Write the following code in the module.

Code:

 Sub start_time() Application.OnTime Now + TimeValue("00:00:01"), "next_moment" End Sub Sub end_time() Application.OnTime Now + TimeValue("00:00:01"), "next_moment", , False End Sub Sub next_moment() If Worksheets("Time Counter").Range("A2").Value = 0 Then Exit Sub Worksheets("Time Counter").Range("A2").Value = Worksheets("Time Counter").Range("A2").Value - TimeValue("00:00:01") start_time End Sub 

We have used the ‘onTime‘ method of the Application object, which is used to run a procedure at a scheduled time. The procedure, which we have scheduled to run, is “next_moment”.

Save the code. Write the time in the A2 cell and click on the ‘Start’ button to start the time counter.

Example #3

Suppose, we have a list of students along with marks scored by them. We want to count the number of students who passed and who failed.

To do the same, we will write the VBA code.

Steps would be:

Open Visual Basic editor by pressing shortcut in excel Alt+F11 and double click on ‘Sheet3 (Counting Number of students)’ to insert a subroutine based on an event in Sheet3.

Choose ‘Worksheet’ from the dropdown.

As we pick ‘Worksheet’ from the list, we can see, there are various events in the adjacent dropdown. We need to choose ‘SelectionChange’ from the list.

We will declare the VBA variable ‘lastrow’ for storing last row number as a list for students can increase, ‘pass’ to store a number of students who passed and ‘fail’ to store a number of students who failed.

We will store the value of the last row number in ‘lastrow’.

We will create the ‘for’ loop for counting based on condition.

We have set the condition if the total marks are greater than 99 then add the value 1 to ‘pass’ variable and add 1 value to the ‘fail’ variable if the condition fails.

The last statement makes the heading ‘Summary’ bold.

To print the values in the sheet, the code would be:

Code:

 Private Sub Worksheet_SelectionChange( ByVal Target As Range) Dim lastrow As Long Dim pass As Integer Dim fail As Integer lastrow = Range("A1").CurrentRegion.End(xlDown).Row For i = 2 To lastrow If Cells(i, 5) > 99 Then pass = pass + 1 Else fail = fail + 1 End If Cells(1, 7).Font.Bold = True Next i Range("G1").Value = "Summary" Range("G2").Value = "The number of students who passed is " & pass Range("G3").Value = "The number of students who failed is " & fail End Sub 

Now whenever there is a change in selection, values will be calculated again as below:

Things to Remember

  1. Save the file after writing code in VBA with .xlsm excel extension otherwise macro will not work.
  2. Use the ‘For’ loop when it is decided already that for how many times, the code in VBA loop will run.