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

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

Groene en digitale revolutie: hoe voorspellend onderhoud de olie- en gasindustrie transformeert

Voorspellend onderhoud zorgt voor een revolutie in de olie- en gassector, met een innovatieve en proactieve benadering van fabrieksbeheer.…

April 22 2024

De Britse antitrusttoezichthouder slaat BigTech-alarm over GenAI

De Britse CMA heeft een waarschuwing afgegeven over het gedrag van Big Tech op de markt voor kunstmatige intelligentie. Daar…

April 18 2024

Casa Green: energierevolutie voor een duurzame toekomst in Italië

Het "Case Green"-decreet, opgesteld door de Europese Unie om de energie-efficiëntie van gebouwen te verbeteren, heeft zijn wetgevingsproces afgesloten met...

April 18 2024