Artikler

Eksempler på Excel-makroer skrevet med VBA

Følgende simple Excel-makroeksempler blev skrevet ved hjælp af VBA 

Estimeret læsetid: 3 minutter

VBA eksempel ved hjælp af Array

Følgende underprocedure læser værdier fra celler i kolonne A i det aktive regneark, indtil det støder på en tom celle. Værdierne er gemt i et array. Dette simple Excel-makroeksempel illustrerer brugen af:

  • Variable erklæringer;
  • Dynamiske arrays;
  • En cyklus Do Until;
  • Se celler i det aktuelle Excel-regneark;
  • VBA-funktionen Ubound indbygget (som returnerer det højeste indeks for en matrix).
' 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

Proceduren gemmer værdierne i kolonne A i det aktive regneark i et array, bemærk at:

  • Cyklussen Do Until udtrækker værdierne for hver celle i kolonne A i det aktive regneark og ignorerer tomme celler
  • Betingelsen "If UBound(dCellValues) < iRow” kontrollerer, at dCellValues-arrayet er stort nok til at indeholde oplysningerne, hvis ikke, brug ReDim til at øge størrelsen af ​​arrayet med 10
  • Endelig uddannelse​​dCellValues(iRow) = Cells(iRow, 1).Value” Gemmer den aktuelle celle i CellValues-arrayet

VBA eksempel med matematiske operationer

Den følgende underprocedure læser værdierne fra kolonne A i regnearket med navnet "Sheet2" og udfører aritmetiske operationer på værdierne. De resulterende værdier udskrives i kolonne A i det aktuelle aktive regneark.

Denne makro illustrerer:

Nyhedsbrev om innovation
Gå ikke glip af de vigtigste nyheder om innovation. Tilmeld dig for at modtage dem via e-mail.
  • Variable erklæringer;
  • Excel-objekter (specifikt brug af nøgleordet Set, og hvordan man får adgang til 'Columns'-objektet fra 'Sheets'-objektet);
  • En cyklus Do Until;
  • Få adgang til regneark og celleområder i den aktuelle Excel-projektmappe.
' 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-eksempel med ændringsdatoregistrering

Lad os skrive en simpel VBA-makro, der udløses, når en celle i et specifikt område af vores ark opdateres. Antag, at du vil spore ændringer i kolonne B (B4 til B11) og registrere dato og klokkeslæt for ændringen i kolonne A.
Lad os fortsætte sådan her:

  • I fanen Developer klik på mulighed "Visual Basic” for at åbne VBA-editoren.
  • I VBA-editoren skal du dobbeltklikke på kodeeditoren relateret til Sheet2.
  • Vælg regneark fra højre (eller venstre) fane, og vælg indstillingen Skift.
  • Tilføj VBA-kode:
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

Gem projektmappen med makroer aktiveret (for eksempel som en .xlsm-fil).


Hver gang vi opdaterer en celle i kolonne B (fra række 1 til række 10), vil cellen i kolonne A automatisk vise den aktuelle dato og klokkeslæt.

Ercole Palmeri

Nyhedsbrev om innovation
Gå ikke glip af de vigtigste nyheder om innovation. Tilmeld dig for at modtage dem via e-mail.

Seneste artikler

Veeam har den mest omfattende support til ransomware, fra beskyttelse til respons og gendannelse

Coveware by Veeam vil fortsætte med at levere responstjenester til cyberafpresning. Coveware vil tilbyde kriminaltekniske og afhjælpende funktioner...

23 April 2024

Grøn og digital revolution: Hvordan prædiktiv vedligeholdelse transformerer olie- og gasindustrien

Forudsigende vedligeholdelse revolutionerer olie- og gassektoren med en innovativ og proaktiv tilgang til anlægsstyring...

22 April 2024

Britisk antitrust-tilsynsmyndighed rejser BigTech-alarm over GenAI

Det britiske CMA har udsendt en advarsel om Big Techs adfærd på markedet for kunstig intelligens. Der…

18 April 2024

Casa Green: energirevolution for en bæredygtig fremtid i Italien

Dekretet om "grønne huse", der er formuleret af Den Europæiske Union for at øge bygningers energieffektivitet, har afsluttet sin lovgivningsproces med...

18 April 2024