Introduktion til makroer og VBA

Sådan kommer du i gang med Excel VBA
Liste over ofte brugte koder

Vi har opsummeret forberedelserne til at begynde at skrive VBA og de grundlæggende koder, der ofte bruges. Vi vil introducere eksempler, som du kan kopiere og afprøve, herunder celle-/områdespecifikation, variabler, betinget forgrening, gentagelse, og hvordan man skriver funktioner.

Hvis du vil vide, hvad makroer og VBA er, skal du først se Makroer/VBA introduktionsartikel.

Forberedelse af udviklingsmiljøet (Windows)

Du behøver ikke anden software for at skrive VBA. Skriv det i VBE(Visual Basic Editor) i Excel, og kør det, som det er. Forbered først følgende kun én gang.

1. Vis udviklerfanen

Åbn "Filer" → "Indstillinger" → "Tilpas bånd", marker "Udvikler" på listen over "Hovedfaner" til højre, og tryk på "OK". En "Udvikler"-fane vises på båndet.

2. Åbn VBE

Klik på "Visual Basic" på fanen "Udvikler".Alt+F11Men jeg kan åbne den. Hvis du trykker på den igen, vender du tilbage til Excel-skærmen.

3. Tilføj standardmodul

Vælg "Indsæt" → "Standardmodul" fra VBE-menuen. "Module1" vil blive oprettet i projektet til venstre, og du vil kunne skrive kode til højre. Almindelige makroer er skrevet i dette standardmodul.

4. Slå "Tving variabel erklæring" til

Tjek "Tving variabel erklæring" i VBE's "Værktøjer" → "Indstillinger" → "Rediger" fanen. Følgende linje indsættes automatisk i begyndelsen af ​​det nyoprettede modul, og en fejlmeddelelse vil blive vist for at fortælle dig, hvis du har indtastet et variabelnavn forkert.

toppen af modulet
Option Explicit   ' Placer øverst i modulet for at kræve, at variabler deklareres med Dim.

5. Skriv og udfør

Når du har skrevet koden, skal du klikke inde under Sub ~ End Sub og derefter trykke på "▶" (Sub/Run User Form) på værktøjslinjen, ellerF5Tryk på Fra Excel-skærmen, klik på "Makroer" (Alt+F8) for at vælge et navn og udføre det.

Hvis du vil tjekke mellemværdier, skal du gå til VBE's "View" → "Immediate Window" (Ctrl+G) og skriv "Debug.Print variabelnavn" i koden, værdien vises der.

6. Gem som makroaktiveret projektmappe (.xlsm)

For den projektmappe, hvor du skrev VBA, skal du vælge "Excel Makroer-aktiveret projektmappe (*.xlsm)" i "Gem som". Hvis du gemmer den som en almindelig .xlsx-fil, vil den kode, du skrev, gå tabt.

Når du åbner projektmappen, hvis du modtager en meddelelse, der siger "Sikkerhedsadvarsel: Makroer er blevet deaktiveret", skal du kun klikke på "Aktiver indhold", hvis projektmappen er en, du har oprettet, eller du har tillid til. Makroer kan være blokeret i filer gemt fra e-mail eller internettet. I så fald skal du højreklikke på filen → vælg "Egenskaber" og marker "Tillad".

Ændringer foretaget ved hjælp af en Makroer kan ikke fortrydes med Ctrl+Z.Når du prøver det, skal du bruge en kopi af projektmappen eller øve data.

For Mac skal du vise udviklerfanen ved at vælge menuen "Excel" → "Preferences" → "Bånd og værktøjslinje", og åbne VBE i "Visual Basic" på udviklerfanen.

MacrowØv dig i at bruge browserenØv dig fra at vise udviklingsfanen til at køre kode →

En hurtig referenceliste over ofte brugte koder

Hvis du kan læse så meget, vil du være i stand til at læse mange af de optagede makroer og koder skabt af AI. Detaljerede instruktioner for hver er introduceret i afsnittene nedenfor.

Hvordan man skriverbetydning
Sub MacroName() 〜 End SubBegyndelsen og slutningen af en Makroer (procedure)
' Kommentar' Noter, der ikke udføres fra til slutningen af linjen
Dim item As LongForbered en variabel (Lang er et heltal)
Set item = Worksheets("stemme")Sæt ark, celler osv. ind i variabler
Range("A1")Celle A1
Range("A1:C5")Rækkevidde fra A1 til C5
Cells(row, column)Angiv celler efter række-/kolonnenummer
Cells(Rows.Count, 1).End(xlUp).RowDen sidste række med data i kolonne A
.Valuecelleværdi
If condition Then 〜 End IfUdfør kun, når betingelserne er opfyldt
For i = 1 To 10 〜 Next igentag et bestemt antal gange
For Each item In targetRange 〜 NextBehandl celler inden for rækkevidde én efter én
Function MacroName() … End FunctionHjemmelavet funktion, der returnerer en værdi
WorksheetFunction.Sum(targetRange)Brug af regnearksfunktioner med VBA
MsgBox "tegn"vis besked

Grundlæggende form for Makroer (Sub) og kommentarer

Makroen starter med "Sub macro name()" og slutter med "End Sub". Kommandoerne skrevet i løbet af denne tid vil blive udført i rækkefølge fra toppen. Japansk kan også bruges i makronavne.

Grundlæggende form for Makroer
Sub SayHello()
    ' Denne linje er kommenteret (ikke udført)
    MsgBox "Hej"
End Sub

「'” (enkelt citat) i slutningen af linjen er en kommentar. At skrive ned, hvad du laver, vil hjælpe dig med at læse det senere eller give det videre til en anden.

Brug "Ring" til at kalde andre makroer.

kalde Makroer
Sub RunAll()
    Call CheckSales     ' kalde en anden Makroer
    Call SayHello
End Sub

Hvordan man skriver variabler og konstanter

Variabler er bokse, der gemmer værdier, der bliver beregnet, eller værdier, der bruges mange gange. Forbered den med "Dæmp variabel navn som type", og indtast værdien med "=".

Forbered og brug variabler
Sub VariablesExample()
    Dim total As Long        ' heltal
    Dim customer As String   ' streng
    Dim price As Double      ' tal med decimaler
    Dim today As Date        ' Dato
    Dim finished As Boolean  ' Sandt eller falsk

    total = 12
    customer = "Komorebi Shop"
    price = 1200.5
    today = Date
    finished = False

    Range("A1").Value = customer & ":" & total & "sagen"
End Sub
skimmelsvampHvad skal man putte i
LongHeltal (rækkenummer, antal elementer osv.)
DoubleTal inklusive decimaler (beløb, procenter osv.)
Stringstreng
DateDato/tid
BooleanTrue / False
VariantAlt kan passe (når du ikke bestemmer dig for en type)
Worksheet / RangeArk/celle (indsæt med sæt)

Når du gemmer "ting" (objekter) såsom ark eller celler i variabler, skal du tilføje "Set" i begyndelsen. Glemmer du at vedhæfte det, vil der opstå en fejl, hvor jeg ofte snubler.

Sæt arkceller i variabler
Dim ws As Worksheet
Set ws = Worksheets("stemme")    ' Indsæt ark og celler med Set
ws.Range("A1").Value = "Samlet salg"

Dim target As Range
Set target = ws.Range("A2:C10")
target.ClearContents

For værdier, der ikke ændrer sig under processen, såsom forbrugsafgiftssatsen, skal du kun ændre ét sted, når du ændrer den, hvis du bruger "Konst" for at gøre det til en konstant.

konstant
Const TAX_RATE As Double = 0.1   ' En værdi, der ikke ændres under processen

Range("C2").Value = Range("B2").Value * (1 + TAX_RATE)

Sådan angives celler/områder

Den mest almindelige ting at skrive i VBA er at specificere celler. 「Range("A1")" er celleadressen, og "Celler (række, kolonne)" er angivet med nummer.Celler, som kan angives efter antal, er nyttigt, når du flytter rækker én efter én under gentagelse.

Angivelse af celler/områder
Range("A1").Value = 100                     ' A1
Range("A1:C3").Value = 0                    ' Grupperet i A1-C3
Range("A:A").Font.Bold = True               ' Hele kolonne A
Range("2:2").Font.Bold = True               ' hele anden række
Cells(2, 3).Value = "C2"                     ' 2. række/3. kolonne (C2)
Range(Cells(1, 1), Cells(5, 3)).Select      ' A1〜C5
Worksheets("stemme").Range("A1").Value = "I alt" ' Angiv ark

Hvis du ikke skriver et arknavn, vil det ark, der i øjeblikket er åbent (aktivt ark), blive målrettet. Klik på, når du betjener et andet arkWorksheets("arknavn").” foran.

find den sidste række

For tabeller, hvor antallet af rækker ændres hver måned, skal du kontrollere, hvor meget data der er før behandling. Dette er en måde at skrive på for at finde rækkenummeret på den første celle, der indeholder data, startende fra den nederste celle i kolonne A og arbejde opad.

sidste linje
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row   ' Søg fra bunden af kolonne A til toppen

Range("A2:A" & lastRow).Font.Bold = True     ' Fra bunden af overskriften til sidste linje

Hele bordet/skift/udvid

CurrentRegion・Offset・Tilpas størrelse
Range("A1").CurrentRegion.Select       ' Hele bordet tilsluttet A1
Range("A1").Offset(1, 0).Value = "bunden"    ' 1 linje under (A2)
Range("A1").Offset(0, 2).Value = "højre"    ' 2. række til højre (C1)
Range("A1").Resize(3, 2).Select         ' 3 rækker x 2 kolonner fra A1 (A1:B3)

Manipulering af værdier, formler og formater

Celleværdier læses og skrives ved hjælp af ".Value". For formlen skal du indtaste den samme streng, som når du indtastede den i Excel i ".Formula".

Værdi/Formel/Format
Range("D2").Formula = "=B2*C2"                  ' indtast formlen
Range("A2:D10").ClearContents                   ' Slet kun værdien (formatet forbliver)
Range("A1").Font.Bold = True                    ' Fed
Range("A1").Interior.Color = RGB(255, 242, 204) ' fyldfarve
Range("D2:D10").NumberFormat = "#,##0"          ' 3-cifret skilletegn
Range("A1:D10").Copy Destination:=Worksheets("reserve").Range("A1")  ' kopier og indsæt

Betinget forgrening (If · Select Case)

Brug "Hvis ~ Så" til at adskille behandling baseret på betingelser. Glem ikke "End If" i slutningen.Brug "ElseIf" til at opdele betingelsen i flere betingelser og "Else", når ingen af ​​betingelserne gælder.

If 〜 ElseIf 〜 Else
If Range("B2").Value >= 80 Then
    Range("C2").Value = "Bestået"
ElseIf Range("B2").Value >= 60 Then
    Range("C2").Value = "Genbekræftelse"
Else
    Range("C2").Value = "Mislykkedes"
End If
Blank dom/flere forhold
If Range("A2").Value = "" Then
    MsgBox "A2 er blank"
End If

' Og (begge), Eller (enten), <> (ikke ens)
If Range("B2").Value >= 60 And Range("C2").Value <> "Fravær" Then
    Range("D2").Value = "OK"
End If

Når du opdeler på flere måder baseret på én værdi, er "Vælg sag" lettere at læse.

Select Case
Select Case Range("B2").Value
    Case "Tokyo", "Yokohama"
        Range("C2").Value = "Kanto"
    Case "Osaka", "Kyoto"
        Range("C2").Value = "Kansai"
    Case Else
        Range("C2").Value = "Andet"
End Select

Gentag (For · For Each · Do While)

At udføre den samme behandling for hver række er, hvor VBA viser sin mest kraft."For ~ Næste" gentages, mens variabel i øges med 1.

For … Next (2–10)
Dim i As Long
For i = 2 To 10
    Cells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).Value
Next i

Når du behandler celler i et område eller ark i en projektmappe én efter én, skal du bruge "For hver".

For Each
Dim cell As Range
For Each cell In Range("A2:A10")
    If cell.Value = "" Then
        cell.Interior.Color = RGB(255, 199, 206)   ' udfyld de tomme felter med rødt
    End If
Next cell

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets   ' alle ark
    ws.Range("A1").Font.Bold = True
Next ws

Hvis den afsluttende række ikke er bestemt, skal du bruge "Do While" for at gentage, så længe betingelserne er opfyldt.Hvis du glemmer "r = r + 1", vil du ikke være i stand til at stoppe.Når det ikke stopper,EscEllerCtrl+BreakDu kan afbryde det med .

Do While 〜 Loop
Dim r As Long
r = 2
Do While Cells(r, 1).Value <> ""   ' Indtil kolonne A er tom
    Cells(r, 5).Value = "Bekræftet"
    r = r + 1
Loop
Afslut for
For i = 2 To 100
    If Cells(i, 1).Value = "I alt" Then Exit For   ' udgang midtvejs
Next i

Hvordan man skriver og bruger funktioner

Når vi taler om "funktioner" i VBA, er der tre typer:

Opret din egen funktion (funktion)

Hvis du opretter den ved hjælp af "Funktion", bliver den en funktion, der returnerer den beregnede værdi. Hvis du sætter en værdi i funktionsnavnet, er det resultatet.Hvis du skriver det i et standardmodul, kan du indtaste "=Beløb inklusive moms (A2)" i en celle og bruge det på samme måde som en regnearksfunktion.

Function
Function PriceWithTax(price As Double) As Double
    PriceWithTax = price * 1.1     ' Den værdi, du sætter i funktionsnavnet, bliver resultatet.
End Function

Sub UseFunction()
    Range("B2").Value = PriceWithTax(Range("A2").Value)
End Sub

Brug af regnearksfunktioner med VBA

Funktioner, der bruges i celler, såsom SUM og COUNTIF, kan kaldes med "WorksheetFunction."

WorksheetFunction
Range("C11").Value = WorksheetFunction.Sum(Range("C2:C10"))
Range("C12").Value = WorksheetFunction.Average(Range("C2:C10"))
Range("C13").Value = WorksheetFunction.CountIf(Range("B2:B10"), "Tokyo")

VBA funktioner

VBA tilbyder også funktioner, der håndterer datoer og strenge.

Format・Len・Venstre・Erstat osv.
Range("A1").Value = Format(Date, "yyyy-mm-dd")   ' dagens dato i tekst
Range("A2").Value = Now                           ' aktuelle dato og klokkeslæt
Range("A3").Value = Len("Komorebi Shop")             ' Antal tegn → 13
Range("A4").Value = Left("2026-10-06", 4)         ' 4 tegn fra venstre → 2026
Range("A5").Value = Replace("Tokyo Filial", "Filial", "") ' Erstat → Tokyo
Range("A6").Value = Trim("  Tokyo  ")               ' Slet mellemrummene før og efter

Besked og input (MsgBox · InputBox)

Bruges til at give besked om afslutningen af behandlingen eller til at bekræfte før udførelse. Hvis du bruger "InputBox", kan du indtaste måned, ansvarlig person osv. hver gang du kører programmet.

MsgBox · InputBox
MsgBox "Det er slut"

If MsgBox("Vil du køre det?", vbYesNo) = vbNo Then Exit Sub

Dim answer As String
answer = InputBox("Hvor mange måneder?")
Range("A1").Value = answer & "Månedligt"

Ark/bog operationer

ark bog
Worksheets("Salg").Activate                    ' skifte ark
Worksheets("Salg").Copy After:=Worksheets(Worksheets.Count)  ' kopiark
ActiveSheet.Name = "Okt"                        ' Skift arknavn
Worksheets.Add After:=Worksheets(Worksheets.Count)          ' tilføje ark

Dim book As Workbook
Set book = Workbooks.Open(ThisWorkbook.Path & "\Tokyo_October.xlsx")
book.Close SaveChanges:=False                    ' Luk uden at gemme
ThisWorkbook.Save                                ' Gem denne projektmappe

Hvis der er meget behandling, der skal udføres, kan du stoppe med at opdatere skærmen, og den bliver hurtigere færdig. Du kan skrive processen, når der opstår en fejl ved at bruge "On Error GoTo".

Stop skærmopdateringer
Sub RunFaster()
    Application.ScreenUpdating = False   ' Stop skærmopdateringer
    ' ...Proces der tager tid...
    Application.ScreenUpdating = True    ' tilbage til sidst
End Sub
Vær forberedt på fejl
Sub HandleErrors()
    On Error GoTo ErrHandler
    Worksheets("stemme").Range("A1").Value = "OK"
    Exit Sub
ErrHandler:
    MsgBox "Jeg fik en fejl:" & Err.Description
End Sub

Kombineret eksempel: Salgstabelberegning og farvelægning

Ved at kombinere koden indtil videre får vi dette: I "Salg"-arket, i en tabel med produktnavn i kolonne A, mængde i kolonne B, og enhedspris i kolonne C, beregner du beløbet i kolonne D, og farver rækkerne med 100.000 yen eller mere grønne.

Salgstjek
Sub CheckSales()
    Dim ws As Worksheet
    Dim lastRow As Long, i As Long
    Set ws = Worksheets("Salg")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        ' Beløb = Antal × Enhedspris
        ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
        ' Hvis det er over 100.000 yen, er det grønt.
        If ws.Cells(i, 4).Value >= 100000 Then
            ws.Cells(i, 4).Interior.Color = RGB(198, 239, 206)
        Else
            ws.Cells(i, 4).Interior.ColorIndex = xlNone
        End If
    Next i

    MsgBox lastRow - 1 & "beregnede rækken"
End Sub

Indeholder variabler (Dim), arkspecifikation (Set), sidste række, gentagelse (For) og betinget forgrening (If). Hvis du kan læse "hvad bliver der gjort i hvilken celle" række for række, kan du ændre antallet af rækker og betingelser, så de passer til din tabel.

Selv når du har AI oprette kode, hvis du kan læse denne form, kan du selv kontrollere, hvilken kolonne der beregnes, og om betingelserne er opfyldt.

Få flere oplysninger

Vi anbefaler, at du tjekker kodelisten for at se, hvordan du skriver den og derefter afprøver den ved hjælp af undervisningsmaterialefilen. Denne trin-for-trin introduktionsbog giver dig mulighed for at øve dig i alt fra optagelse af makroer til variabler, gentagelser og betinget forgrening med forbundne eksempler.

For dem, der føler sig hængende ved at gøre det alene, eller dem, der gerne vil diskutere områder af deres arbejde, der kan automatiseres, er det også en mulighed at tage et kursus undervist af en instruktør.

Hvordan man vælger en undersøgelsesmetode er også introduceret i Sådan studerer du makroer og VBA.