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.
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.
Ø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 skriver | betydning |
|---|---|
| Sub MacroName() 〜 End Sub | Begyndelsen og slutningen af en Makroer (procedure) |
| ' Kommentar | ' Noter, der ikke udføres fra til slutningen af linjen |
| Dim item As Long | Forbered 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).Row | Den sidste række med data i kolonne A |
| .Value | celleværdi |
| If condition Then 〜 End If | Udfør kun, når betingelserne er opfyldt |
| For i = 1 To 10 〜 Next i | gentag et bestemt antal gange |
| For Each item In targetRange 〜 Next | Behandl celler inden for rækkevidde én efter én |
| Function MacroName() … End Function | Hjemmelavet 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.
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.
Sub RunAll()
Call CheckSales ' kalde en anden Makroer
Call SayHello
End SubHvordan 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 "=".
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| skimmelsvamp | Hvad skal man putte i |
|---|---|
| Long | Heltal (rækkenummer, antal elementer osv.) |
| Double | Tal inklusive decimaler (beløb, procenter osv.) |
| String | streng |
| Date | Dato/tid |
| Boolean | True / False |
| Variant | Alt kan passe (når du ikke bestemmer dig for en type) |
| Worksheet / Range | Ark/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.
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.ClearContentsFor 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.
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.
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 arkHvis 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.
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 linjeHele bordet/skift/udvid
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".
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ætBetinget 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 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 IfIf 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 IfNår du opdeler på flere måder baseret på én værdi, er "Vælg sag" lettere at læse.
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 SelectGentag (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.
Dim i As Long
For i = 2 To 10
Cells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).Value
Next iNår du behandler celler i et område eller ark i en projektmappe én efter én, skal du bruge "For hver".
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 wsHvis 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 .
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
LoopFor i = 2 To 100
If Cells(i, 1).Value = "I alt" Then Exit For ' udgang midtvejs
Next iHvordan 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 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 SubBrug af regnearksfunktioner med VBA
Funktioner, der bruges i celler, såsom SUM og COUNTIF, kan kaldes med "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.
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 efterBesked 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 "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
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 projektmappeHvis 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".
Sub RunFaster()
Application.ScreenUpdating = False ' Stop skærmopdateringer
' ...Proces der tager tid...
Application.ScreenUpdating = True ' tilbage til sidst
End SubSub HandleErrors()
On Error GoTo ErrHandler
Worksheets("stemme").Range("A1").Value = "OK"
Exit Sub
ErrHandler:
MsgBox "Jeg fik en fejl:" & Err.Description
End SubKombineret 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.
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 SubIndeholder 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.