Artikler

Eksempler på Excel-makroer skrevet med VBA

Følgende enkle Excel-makroeksempler ble skrevet ved hjelp av VBA 

Beregnet lesetid: 3 minutter

VBA eksempel ved bruk av Array

Følgende underprosedyre leser verdier fra cellene i kolonne A i det aktive regnearket, til det møter en tom celle. Verdiene er lagret i en matrise. Dette enkle Excel-makroeksemplet illustrerer bruken av:

  • Variable erklæringer;
  • Dynamiske arrays;
  • En syklus Do Until;
  • Se celler i det gjeldende Excel-regnearket;
  • VBA-funksjonen Ubound innebygd (som returnerer den høyeste indeksen til en matrise).
' 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

Prosedyren lagrer verdiene i kolonne A i det aktive regnearket i en matrise, merk at:

  • Syklusen Do Until trekker ut verdiene til hver celle i kolonne A i det aktive regnearket, og ignorerer tomme celler
  • Tilstanden "If UBound(dCellValues) < iRow" sjekker at dCellValues-matrisen er stor nok til å holde informasjonen, hvis ikke, bruk ReDim for å øke størrelsen på matrisen med 10
  • Til slutt, utdanning​​dCellValues(iRow) = Cells(iRow, 1).ValueLagrer gjeldende celle i CellValues-arrayen

VBA eksempel med matematiske operasjoner

Følgende underprosedyre leser verdiene fra kolonne A i regnearket kalt "Sheet2" og utfører aritmetiske operasjoner på verdiene. De resulterende verdiene skrives ut i kolonne A i det gjeldende aktive regnearket.

Denne makroen illustrerer:

Nyhetsbrev for innovasjon
Ikke gå glipp av de viktigste nyhetene om innovasjon. Registrer deg for å motta dem på e-post.
  • Variable erklæringer;
  • Excel-objekter (spesifikt bruk av nøkkelordet Set og hvordan du får tilgang til 'Columns'-objektet fra 'Sheets'-objektet);
  • En syklus Do Until;
  • Få tilgang til regneark og celleområder i gjeldende Excel-arbeidsbok.
' 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 opptak av modifikasjonsdato

La oss skrive en enkel VBA-makro som utløses når en celle i et spesifikt område av arket vårt oppdateres. Anta at du vil spore endringer i kolonne B (B4 til B11) og registrere dato og klokkeslett for endringen i kolonne A.
La oss fortsette slik:

  • I fanen Developer klikk på alternativet "Visual Basic" for å åpne VBA-editoren.
  • I VBA-redigeringsprogrammet dobbeltklikker du på koderedigeringsprogrammet relatert til Ark2.
  • Velg Regneark fra høyre (eller venstre) fane og velg alternativet Endre.
  • Legg til 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

Lagre arbeidsboken med makroer aktivert (for eksempel som en .xlsm-fil).


Nå, hver gang vi oppdaterer en celle i kolonne B (fra rad 1 til rad 10), vil cellen i kolonne A automatisk vise gjeldende dato og klokkeslett.

Ercole Palmeri

Nyhetsbrev for innovasjon
Ikke gå glipp av de viktigste nyhetene om innovasjon. Registrer deg for å motta dem på e-post.

Siste artikler

Veeam har den mest omfattende støtten for løsepengevare, fra beskyttelse til respons og gjenoppretting

Coveware by Veeam vil fortsette å tilby responstjenester for cyberutpressing. Coveware vil tilby kriminaltekniske og utbedringsmuligheter...

23 april 2024

Grønn og digital revolusjon: Hvordan prediktivt vedlikehold transformerer olje- og gassindustrien

Prediktivt vedlikehold revolusjonerer olje- og gasssektoren, med en innovativ og proaktiv tilnærming til anleggsledelse...

22 april 2024

Britisk antitrustregulator vekker BigTech-alarm over GenAI

UK CMA har utstedt en advarsel om Big Techs oppførsel i markedet for kunstig intelligens. Der…

18 april 2024

Casa Green: energirevolusjon for en bærekraftig fremtid i Italia

"Green Houses"-dekretet, formulert av EU for å forbedre energieffektiviteten til bygninger, har avsluttet sin lovgivningsprosess med...

18 april 2024