Artikelen

Voorbeelden van Excel-macro's geschreven met VBA

De volgende eenvoudige Excel-macrovoorbeelden zijn geschreven met VBA 

Geschatte leestijd: 3 minuti

VBA-voorbeeld met Array

De volgende subprocedure leest waarden uit cellen in kolom A van het actieve werkblad, totdat deze een lege cel tegenkomt. De waarden worden opgeslagen in een array. Dit eenvoudige Excel-macrovoorbeeld illustreert het gebruik van:

  • Variabele declaraties;
  • Dynamische arrays;
  • een cyclus Do Until;
  • Verwijs naar cellen in het huidige Excel-werkblad;
  • De VBA-functie Ubound ingebouwde (die de hoogste index van een array retourneert).
' Sub procedure store values in Column A of the active Worksheet
' into an array
Sub GetCellValues()
Dim iRow As Integer            ' stores the current row number
Dim dCellValues() As Double  ' array to store the cell values
iRow = 1
ReDim dCellValues(1 To 10)
' Do Until loop to extract the value of each cell in column A
' of the active Worksheet, as long as the cell is not blank
Do Until IsEmpty(Cells(iRow, 1))
   ' Check that the dCellValues array is big enough
   ' If not, use ReDim to increase the size of the array by 10
   If UBound(dCellValues) < iRow Then
      ReDim Preserve dCellValues(1 To iRow + 9)
   End If
   ' Store the current cell in the CellValues array
   dCellValues(iRow) = Cells(iRow, 1).Value
   iRow = iRow + 1
Loop
End Sub

De procedure slaat de waarden in kolom A van het actieve werkblad op in een array, let op:

  • De cyclus Do Until extraheert de waarden van elke cel in kolom A van het actieve werkblad, waarbij lege cellen worden genegeerd
  • De conditie "If UBound(dCellValues) < iRow”controleert of de dCellValues-array groot genoeg is om de informatie te bevatten, zo niet, gebruik dan ReDim om de grootte van de array met 10 te vergroten
  • Tenslotte het onderwijs​​dCellValues(iRow) = Cells(iRow, 1).ValueSlaat de huidige cel op in de CellValues-array

VBA-voorbeeld met wiskundige bewerkingen

De volgende subprocedure leest de waarden uit kolom A van het werkblad met de naam "Blad2" en voert rekenkundige bewerkingen uit op de waarden. De resulterende waarden worden afgedrukt in kolom A van het huidige actieve werkblad.

Deze macro illustreert:

Innovatie nieuwsbrief
Mis het belangrijkste nieuws over innovatie niet. Meld u aan om ze per e-mail te ontvangen.
  • Variabele declaraties;
  • Excel-objecten (met name het gebruik van het trefwoord Set en hoe u toegang krijgt tot het object 'Kolommen' vanuit het object 'Bladbladen');
  • een cyclus Do Until;
  • Krijg toegang tot werkbladen en celbereiken in de huidige Excel-werkmap.
' Sub procedure to loop through the values in Column A of the Worksheet
' "Sheet2", perform arithmetic operations on each value, and write the
' result into Column A of the current Active Worksheet ("Sheet1")
Sub Transfer_ColA()
Dim i As Integer
Dim Col As Range
Dim dVal As Double
' Set the variable 'Col' to be Column A of Sheet 2
Set Col = Sheets("Sheet2").Columns("A")
i = 1
' Loop through each cell of the column 'Col' until
' a blank cell is encountered
Do Until IsEmpty(Col.Cells(i))
   ' Apply arithmetic operations to the value of the current cell
   dVal = Col.Cells(i).Value * 2 + 1
   ' The command below copies the result into Column A
   ' of the current Active Worksheet - no need to specify
   ' the Worksheet name as it is the active Worksheet.
   Cells(i, 1) = dVal
   i = i + 1
Loop
End Sub

VBA-voorbeeld met wijzigingsdatumregistratie

Laten we een eenvoudige VBA-macro schrijven die wordt geactiveerd wanneer een cel in een specifiek bereik van ons blad wordt bijgewerkt. Stel dat u de wijzigingen in kolom B (B4 tot en met B11) wilt bijhouden en de datum en tijd van de wijziging in kolom A wilt vastleggen.
Laten we als volgt verder gaan:

  • In het tabblad Developer klik op optie "Visual Basic” om de VBA-editor te openen.
  • Dubbelklik in de VBA-editor op de code-editor gerelateerd aan Sheet2.
  • Kies Werkblad op het rechter (of linker) tabblad en selecteer de optie Wijzigen.
  • VBA-code toevoegen:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("B1:B10")) Is Nothing Then
        Target.Range("A1:A1").Value = Now
    End If
End Sub

Sla de werkmap op met ingeschakelde macro's (bijvoorbeeld als een .xlsm-bestand).


Elke keer dat we een cel in kolom B bijwerken (van rij 1 tot rij 10), geeft de cel in kolom A automatisch de huidige datum en tijd weer.

Ercole Palmeri

Innovatie nieuwsbrief
Mis het belangrijkste nieuws over innovatie niet. Meld u aan om ze per e-mail te ontvangen.

Recente artikelen

De toekomst is hier: hoe de scheepvaartindustrie een revolutie teweegbrengt in de wereldeconomie

De marinesector is een echte mondiale economische macht, die is genavigeerd naar een markt van 150 miljard...

1 mei 2024

Uitgevers en OpenAI ondertekenen overeenkomsten om de informatiestroom die door kunstmatige intelligentie wordt verwerkt, te reguleren

Afgelopen maandag maakte de Financial Times een deal met OpenAI bekend. FT geeft licenties voor haar journalistiek van wereldklasse...

April 30 2024

Online betalingen: hier is hoe streamingdiensten u voor altijd laten betalen

Miljoenen mensen betalen voor streamingdiensten en betalen maandelijkse abonnementskosten. De algemene mening is dat je…

April 29 2024

Veeam biedt de meest uitgebreide ondersteuning voor ransomware, van bescherming tot respons en herstel

Coveware by Veeam zal responsdiensten op het gebied van cyberafpersingsincidenten blijven leveren. Coveware zal forensische en herstelmogelijkheden bieden...

April 23 2024