VBA-räknare

Excel VBA-räknare

Det finns de olika funktionerna i MS Excel för att räkna värden om det är en sträng, siffror. Räkning kan göras baserat på vissa kriterier. Funktionerna inkluderar COUNT, COUNTA, COUNTBLANK, COUNTIF och COUNTIFS i excel. Dessa funktioner kan dock inte göra vissa uppgifter som att räkna cellerna baserat på deras färg, bara räkna fetstil osv. Det är därför vi kommer att skapa en räknare i VBA så att vi kan räkna med dessa typer av uppgifter i Excel.

Låt oss skapa en räknare i excel VBA.

Exempel på Excel VBA Counter

Du kan ladda ner denna VBA Counter Excel-mall här - VBA Counter Excel-mall

Nedan följer exempel på räknaren i VBA.

Exempel nr 1

Antag att vi har data som ovan för 32 rader. Vi skapar en VBA-räknare som räknar värdena som är större än 50 och ytterligare en räknare för att räkna värdena som är mindre än 50. Vi kommer att skapa VBA-koden på detta sätt så att användaren kan ha data för obegränsade rader i Excel.

För att göra detsamma skulle stegen vara:

Se till Developer  fliken Excel är synlig. För att göra fliken synlig (om inte) är stegen:

Klicka på fliken "Arkiv" i menyfliksområdet och välj "Alternativ" i listan.

Välj " Anpassa menyfliksområdet" från listan, markera rutan för "Utvecklare" och klicka på OK .

Nu är fliken "Utvecklare" synlig.

Infoga kommandoknappen med kommandot 'Infoga' som finns i gruppen 'Kontroller'fliken 'Utvecklare' .

Medan du trycker på ALT- tangenten skapar du kommandoknappen med musen. Om vi ​​fortsätter att trycka på ALT-tangenten går kanterna på kommandoknappen automatiskt med cellernas kant.

Högerklicka på kommandoknappen för att öppna kontextmenyn (se till att 'Design Mode' är aktiverat annars kommer vi inte att kunna öppna snabbmenyn).

Välj Egenskaper i menyn.

Ändra egenskaperna för kommandoknappen, dvs. namn, bildtext och typsnitt, etc.

Högerklicka igen och välj 'Visa kod' från snabbmenyn.

Visual Basic Editor öppnas nu och som standard skapas redan en underrutin för kommandoknappen.

Vi kommer att skriva kod nu. Vi kommer att deklarera 3 variabler. En för loopändamål, en för att räkna och en för att lagra värdet för den sista raden.

Vi använder koden för att välja cell A1 och sedan den aktuella regionen för cell A1 och sedan gå ner till den senast fyllda raden för att få det senast fyllda radnumret.

Vi kommer att köra en 'for' -slinga i VBA för att kontrollera värdena skrivna i A2-cellen till den senast fyllda cellen i A-kolumnen. Vi kommer att öka värdet på "räknare" -variabeln med 1 om värdet är större än 50 och kommer att ändra teckensnittsfärgen på cellen till "Blå" och om värdet är mindre än 50 skulle cellens teckensnittsfärg vara 'Röd' .

Efter kontroll och räkning måste vi visa värdena. För att göra detsamma använder vi 'VBA MsgBox'.

Koda:

 Privat delräkningCellsbyValue_Click () Dim i, räknare Som heltal Dim lastrow Som Long lastrow = Range ("A1"). CurrentRegion.End (xlDown). Row For i = 2 To lastrow If Cells (i, 1) .Value> 50 Then räknare = räknare + 1 celler (i, 1). Font.ColorIndex = 5 Annan celler (i, 1). Font.ColorIndex = 3 Slut om nästa i MsgBox "Det finns" & räknare & "värden som är större än 50" & _ vbCrLf & "There are" & lastrow - counter & "värden som är mindre än 50" End Sub 

Inaktivera "Design Mode" och klicka på "Command-knappen" . Resultatet skulle bli som följer.

Exempel 2

Antag att vi vill skapa tidsräknaren med hjälp av Excel VBA enligt följande:

Om vi ​​klickar på "Start" -knappen startar timern och om vi klickar på "Stop" -knappen stannar timern.

För att göra detsamma skulle stegen vara:

Skapa ett format som detta i ett Excel-ark.

Ändra formatet på cellen A2 som 'hh: mm: ss' .

Sammanfoga cellerna C3 till G7 med hjälp av  kommandot Merge and Center Excel i gruppen "Alignment"fliken "Home" .

Ge referens för cell A2 för just sammanslagen cell och gör sedan formateringen som att göra typsnittet till 'Baskerville' , teckenstorlek till 60 etc.

Skapa två kommandoknappar 'Start' och 'Stopp' med kommandot 'Infoga' som finns i gruppen 'Kontroller'fliken 'Utvecklare' .

Ändra egenskaperna med kommandot 'Egenskaper' i gruppen 'Kontroller'fliken 'Utvecklare' .

Välj kommandoknapparna en efter en och välj kommandot "Visa kod" från gruppen "Kontroller" på fliken "Utvecklare" för att skriva koden enligt följande.

Välj lämplig kommandoknapp i rullgardinsmenyn.

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.