Introduktion till makron och VBA
Så här kommer du igång med Excel VBA
Lista över ofta använda koder
Vi har sammanfattat förberedelserna för att börja skriva VBA och de grundläggande koder som ofta används. Vi kommer att introducera exempel som du kan kopiera och prova, inklusive cell-/intervallspecifikation, variabler, villkorlig förgrening, upprepning och hur man skriver funktioner.
Om du vill veta vad makron och VBA är, se Makron/VBA introduktionsartikel först.
Förbereda utvecklingsmiljön (Windows)
Du behöver ingen annan programvara för att skriva VBA. Skriv det i VBE(Visual Basic Editor) i Excel och kör det som det är. Förbered först följande endast en gång.
1. Visa fliken utvecklare
Öppna "Arkiv" → "Alternativ" → "Anpassa menyfliksområdet", markera "Utvecklare" i listan över "Huvudflikar" till höger och tryck på "OK". En "Utvecklare"-flik visas på menyfliksområdet.
2. Öppna VBE
Klicka på "Visual Basic" på fliken "Utvecklare".Alt+F11Men jag kan öppna den. Om du trycker på den igen kommer du tillbaka till Excel-skärmen.
3. Lägg till standardmodul
Välj "Infoga" → "Standardmodul" från VBE-menyn. "Module1" kommer att skapas i projektet till vänster, och du kommer att kunna skriva kod till höger. Vanliga makron skrivs i denna standardmodul.
4. Aktivera "Tvinga fram variabeldeklaration"
Kontrollera "Tvinga variabeldeklaration" i VBE:s "Verktyg" → "Alternativ" → "Redigera"-fliken. Följande rad infogas automatiskt i början av den nyskapade modulen och ett felmeddelande kommer att visas för att meddela dig om du har skrivit fel ett variabelnamn.
Option Explicit ' Placera överst i modulen för att kräva att variabler deklareras med Dim.5. Skriv och utför
Efter att ha skrivit koden, klicka inuti Sub ~ End Sub och tryck sedan på "▶" (Sub/Run User Form) i verktygsfältet, ellerF5Tryck på Från Excel-skärmen, klicka på "Makron" (Alt+F8) för att välja ett namn och köra det.
Om du vill kontrollera mellanvärden, gå till VBE:s "Visa" → "Omedelbart fönster" (Ctrl+G) och skriv "Debug.Print variabelnamn" i koden, kommer värdet att visas där.
6. Spara som makroaktiverad arbetsbok (.xlsm)
För arbetsboken där du skrev VBA, välj "Excel makroaktiverad arbetsbok (*.xlsm)" i "Spara som". Om du sparar den som en vanlig .xlsx-fil kommer koden du skrev att gå förlorad.
När du öppnar arbetsboken, om du får ett meddelande som säger "Säkerhetsvarning: Makron har inaktiverats", klicka bara på "Aktivera innehåll" om arbetsboken är en du har skapat eller du litar på. Makron kan vara blockerade i filer som sparats från e-post eller Internet. I så fall högerklickar du på filen → välj "Egenskaper" och markerar "Tillåt".
Ändringar som görs med ett Makron kan inte ångras med Ctrl+Z.När du testar det, använd en kopia av arbetsboken eller övningsdata.
För Mac, visa utvecklarfliken genom att välja "Excel"-menyn → "Inställningar" → "Ribbon and Toolbar" och öppna VBE i "Visual Basic" på utvecklarfliken.
Öva på att använda webbläsarenÖva från att visa utvecklingsfliken till att köra kod →En snabbreferenslista över ofta använda koder
Om du kan läsa så mycket kommer du att kunna läsa många av de inspelade makron och koder som skapats av AI. Detaljerade instruktioner för varje presenteras i avsnitten nedan.
| Hur man skriver | mening |
|---|---|
| Sub MacroName() 〜 End Sub | Början och slutet av ett Makron (procedur) |
| ' Kommentera | ' Anteckningar som inte exekveras från till slutet av raden |
| Dim item As Long | Förbered en variabel (Lång är ett heltal) |
| Set item = Worksheets("stämma") | Lägg ark, celler etc. i variabler |
| Range("A1") | Cell A1 |
| Range("A1:C5") | Spänner från A1 till C5 |
| Cells(row, column) | Ange celler efter rad-/kolumnnummer |
| Cells(Rows.Count, 1).End(xlUp).Row | Den sista raden med data i kolumn A |
| .Value | cellvärde |
| If condition Then 〜 End If | Utför endast när villkoren är uppfyllda |
| For i = 1 To 10 〜 Next i | upprepa ett visst antal gånger |
| For Each item In targetRange 〜 Next | Bearbeta celler inom området en efter en |
| Function MacroName() … End Function | Hemmagjord funktion som returnerar ett värde |
| WorksheetFunction.Sum(targetRange) | Använda kalkylbladsfunktioner med VBA |
| MsgBox "tecken" | visa meddelande |
Grundläggande form av Makron (Sub) och kommentarer
Makrot börjar med "Sub macro name()" och slutar med "End Sub". Kommandona som skrivs under denna tid kommer att utföras i ordning från toppen. Japanska kan också användas i makronamn.
Sub SayHello()
' Den här raden är kommenterad (ej körd)
MsgBox "Hej!"
End Sub「'” (enkla citat) i slutet av raden är en kommentar.När du skriver ner vad du gör hjälper dig att läsa den senare eller skicka den vidare till någon annan.
Använd "Ring" för att anropa andra makron.
Sub RunAll()
Call CheckSales ' anropa ett annat Makron
Call SayHello
End SubHur man skriver variabler och konstanter
Variabler är rutor som lagrar värden som beräknas eller värden som används många gånger. Förbered den med "Dim variabelnamn som typ" och ange värdet med "=".
Sub VariablesExample()
Dim total As Long ' heltal
Dim customer As String ' sträng
Dim price As Double ' tal med decimaler
Dim today As Date ' Datum
Dim finished As Boolean ' Sant eller falskt
total = 12
customer = "Komorebi Shop"
price = 1200.5
today = Date
finished = False
Range("A1").Value = customer & ":" & total & "fråga"
End Sub| mögel | Vad ska man lägga i |
|---|---|
| Long | Heltal (radnummer, antal objekt, etc.) |
| Double | Tal inklusive decimaler (belopp, procent, etc.) |
| String | sträng |
| Date | Datum/tid |
| Boolean | True / False |
| Variant | Allt kan passa (när du inte bestämmer dig för typ) |
| Worksheet / Range | Ark/cell (infoga med set) |
När du lagrar "saker" (objekt) som ark eller celler i variabler, lägg till "Ställ in" i början. Om du glömmer att bifoga den så uppstår ett fel, där jag ofta snubblar.
Dim ws As Worksheet
Set ws = Worksheets("stämma") ' Infoga ark och celler med Set
ws.Range("A1").Value = "Total försäljning"
Dim target As Range
Set target = ws.Range("A2:C10")
target.ClearContentsFör värden som inte ändras under processen, såsom konsumtionsskattesatsen, om du använder "Const" för att göra det till en konstant, behöver du bara ändra en plats när du ändrar den.
Const TAX_RATE As Double = 0.1 ' Ett värde som inte ändras under processen
Range("C2").Value = Range("B2").Value * (1 + TAX_RATE)Hur man anger celler/intervall
Det vanligaste att skriva i VBA är att specificera celler. 「Range("A1")" är celladressen och "Celler (rad, kolumn)" anges med nummer.Celler, som kan anges med nummer, är användbart när du flyttar rader en efter en under upprepning.
Range("A1").Value = 100 ' A1
Range("A1:C3").Value = 0 ' Grupperas i A1-C3
Range("A:A").Font.Bold = True ' Hela kolumn A
Range("2:2").Font.Bold = True ' hela andra raden
Cells(2, 3).Value = "C2" ' 2:a raden/3:e kolumnen (C2)
Range(Cells(1, 1), Cells(5, 3)).Select ' A1〜C5
Worksheets("stämma").Range("A1").Value = "Totalt" ' Ange bladOm du inte skriver ett arknamn kommer det ark som för närvarande är öppet (aktivt ark) att riktas in. När du använder ett annat ark, klickaWorksheets("arknamn").” framför.
hitta den sista raden
För tabeller där antalet rader ändras varje månad, kontrollera hur mycket data det finns innan bearbetning. Detta är ett sätt att skriva för att hitta radnumret för den första cellen som innehåller data, med början från den nedre cellen i kolumn A och arbeta uppåt.
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' Sök från botten av kolumn A till toppen
Range("A2:A" & lastRow).Font.Bold = True ' Från botten av rubriken till sista radenHela bordet/skift/expandera
Range("A1").CurrentRegion.Select ' Hela bordet kopplat till A1
Range("A1").Offset(1, 0).Value = "botten" ' 1 rad under (A2)
Range("A1").Offset(0, 2).Value = "rätt" ' 2:a raden höger (C1)
Range("A1").Resize(3, 2).Select ' 3 rader x 2 kolumner från A1 (A1:B3)Manipulera värden, formler och format
Cellvärden läses och skrivs med ".Value". För formeln anger du samma sträng som när du skrev in den i Excel i ".Formula".
Range("D2").Formula = "=B2*C2" ' ange formeln
Range("A2:D10").ClearContents ' Ta bara bort värdet (formatet finns kvar)
Range("A1").Font.Bold = True ' Fet
Range("A1").Interior.Color = RGB(255, 242, 204) ' fyllningsfärg
Range("D2:D10").NumberFormat = "#,##0" ' 3-siffrig avgränsare
Range("A1:D10").Copy Destination:=Worksheets("reserv").Range("A1") ' kopiera och klistra inVillkorlig förgrening (If · Select Case)
Använd "Om ~ Då" för att separera bearbetning baserat på villkor. Glöm inte "End If" i slutet.Använd "ElseIf" för att dela upp villkoret i flera villkor och "Else" när inget av villkoren gäller.
If Range("B2").Value >= 80 Then
Range("C2").Value = "Godkänd"
ElseIf Range("B2").Value >= 60 Then
Range("C2").Value = "Återbekräftelse"
Else
Range("C2").Value = "Misslyckas"
End IfIf Range("A2").Value = "" Then
MsgBox "A2 är tom"
End If
' Och (båda), Eller (antingen), <> (inte lika)
If Range("B2").Value >= 60 And Range("C2").Value <> "Frånvaro" Then
Range("D2").Value = "OK"
End IfNär du delar upp på flera sätt baserat på ett värde är "Välj fall" lättare att läsa.
Select Case Range("B2").Value
Case "Tokyo", "Yokohama"
Range("C2").Value = "Kanto"
Case "Osaka", "Kyoto"
Range("C2").Value = "Kansai"
Case Else
Range("C2").Value = "Annat"
End SelectUpprepa (For · For Each · Do While)
Att utföra samma bearbetning för varje rad är där VBA visar sin mest kraft."For ~ Next" upprepas samtidigt som variabel i ökar 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 bearbetar celler i ett område eller ark i en arbetsbok en efter en, använd "För varje".
Dim cell As Range
For Each cell In Range("A2:A10")
If cell.Value = "" Then
cell.Interior.Color = RGB(255, 199, 206) ' fyll i tomrummen med rött
End If
Next cell
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets ' alla blad
ws.Range("A1").Font.Bold = True
Next wsOm slutraden inte bestäms, använd "Do While" för att upprepa så länge villkoren är uppfyllda.Om du glömmer "r = r + 1" kommer du inte att kunna sluta.När det inte slutar,EscEllerCtrl+BreakDu kan avbryta den med .
Dim r As Long
r = 2
Do While Cells(r, 1).Value <> "" ' Tills kolumn A är tom
Cells(r, 5).Value = "Bekräftad"
r = r + 1
LoopFor i = 2 To 100
If Cells(i, 1).Value = "Totalt" Then Exit For ' gå ut halvvägs
Next iHur man skriver och använder funktioner
När vi talar om "funktioner" i VBA finns det tre typer:
Skapa din egen funktion (funktion)
Om du skapar den med "Funktion" blir den en funktion som returnerar det beräknade värdet. Om du lägger ett värde i funktionsnamnet är det resultatet.Om du skriver det i en standardmodul kan du ange "=Belopp inklusive moms (A2)" i en cell och använda det på samma sätt som en kalkylbladsfunktion.
Function PriceWithTax(price As Double) As Double
PriceWithTax = price * 1.1 ' Värdet du lägger i funktionsnamnet blir resultatet.
End Function
Sub UseFunction()
Range("B2").Value = PriceWithTax(Range("A2").Value)
End SubAnvända kalkylbladsfunktioner med VBA
Funktioner som används i celler, som SUM och COUNTIF, kan anropas 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 tillhandahåller även funktioner som hanterar datum och strängar.
Range("A1").Value = Format(Date, "yyyy-mm-dd") ' dagens datum i text
Range("A2").Value = Now ' aktuellt datum och tid
Range("A3").Value = Len("Komorebi Shop") ' Antal tecken → 13
Range("A4").Value = Left("2026-10-06", 4) ' 4 tecken från vänster → 2026
Range("A5").Value = Replace("Tokyo Filial", "Filial", "") ' Ersätt → Tokyo
Range("A6").Value = Trim(" Tokyo ") ' Radera mellanrummen före och efterMeddelande och inmatning (MsgBox · InputBox)
Används för att meddela att behandlingen är slut eller för att bekräfta innan exekvering. Om du använder "InputBox" kan du mata in månad, ansvarig, etc. varje gång du kör programmet.
MsgBox "Det är över"
If MsgBox("Vill du köra den?", vbYesNo) = vbNo Then Exit Sub
Dim answer As String
answer = InputBox("Hur många månader?")
Range("A1").Value = answer & "Månatlig"Blad-/bokverksamhet
Worksheets("Försäljning").Activate ' byta ark
Worksheets("Försäljning").Copy After:=Worksheets(Worksheets.Count) ' kopia ark
ActiveSheet.Name = "Okt" ' Ändra arknamn
Worksheets.Add After:=Worksheets(Worksheets.Count) ' lägg till ark
Dim book As Workbook
Set book = Workbooks.Open(ThisWorkbook.Path & "\Tokyo_October.xlsx")
book.Close SaveChanges:=False ' Stäng utan att spara
ThisWorkbook.Save ' Spara denna arbetsbokOm det är mycket bearbetning som ska göras kan du sluta uppdatera skärmen och det kommer att slutföras snabbare. Du kan skriva processen när ett fel uppstår med "On Error GoTo".
Sub RunFaster()
Application.ScreenUpdating = False ' Stoppa skärmuppdateringar
' ...Process som tar tid...
Application.ScreenUpdating = True ' återgå till sist
End SubSub HandleErrors()
On Error GoTo ErrHandler
Worksheets("stämma").Range("A1").Value = "OK"
Exit Sub
ErrHandler:
MsgBox "Jag fick ett fel:" & Err.Description
End SubKombinerat exempel: Försäljningstabellsberäkning och färgläggning
Om vi kombinerar koden hittills får vi detta: I bladet "Försäljning", i en tabell med produktnamn i kolumn A, kvantitet i kolumn B och enhetspris i kolumn C, beräkna beloppet i kolumn D och färga raderna med 100 000 yen eller mer gröna.
Sub CheckSales()
Dim ws As Worksheet
Dim lastRow As Long, i As Long
Set ws = Worksheets("Försäljning")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
' Belopp = Kvantitet × Enhetspris
ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
' Om det är över 100 000 yen är 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 & "beräknade raden"
End SubInnehåller variabler (Dim), arkspecifikation (Set), sista raden, upprepning (För) och villkorlig förgrening (If). Om du kan läsa "vad görs i vilken cell" rad för rad kan du ändra antalet rader och villkor för att passa din tabell.
Även när du har AI-skapande kod, om du kan läsa denna form, kan du själv kontrollera vilken kolumn som beräknas och om villkoren är uppfyllda.
Läs mer
Vi rekommenderar att du kontrollerar kodlistan för att se hur du skriver den och sedan provar med hjälp av läromedelsfilen. Denna steg-för-steg introduktionsbok låter dig öva på allt från att spela in makron till variabler, upprepning och villkorlig förgrening med anslutna exempel.
För de som känner sig fastna i att göra det ensamma, eller de som vill diskutera områden i sitt arbete som kan automatiseras, är det också ett alternativ att ta en kurs som undervisas av en instruktör.
Hur man väljer en studiemetod presenteras också i Hur man studerar makron och VBA.