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.

toppen av modulen
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.

MacrowÖ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 skrivermening
Sub MacroName() 〜 End SubBörjan och slutet av ett Makron (procedur)
' Kommentera' Anteckningar som inte exekveras från till slutet av raden
Dim item As LongFö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).RowDen sista raden med data i kolumn A
.Valuecellvärde
If condition Then 〜 End IfUtför endast när villkoren är uppfyllda
For i = 1 To 10 〜 Next iupprepa ett visst antal gånger
For Each item In targetRange 〜 NextBearbeta celler inom området en efter en
Function MacroName() … End FunctionHemmagjord 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.

Grundläggande form av Makron
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.

samtalsmakro
Sub RunAll()
    Call CheckSales     ' anropa ett annat Makron
    Call SayHello
End Sub

Hur 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 "=".

Förbered och använd variabler
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ögelVad ska man lägga i
LongHeltal (radnummer, antal objekt, etc.)
DoubleTal inklusive decimaler (belopp, procent, etc.)
Stringsträng
DateDatum/tid
BooleanTrue / False
VariantAllt kan passa (när du inte bestämmer dig för typ)
Worksheet / RangeArk/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.

Lägg arkceller i variabler
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.ClearContents

Fö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.

konstant
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.

Ange celler/intervall
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 blad

Om 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.

sista raden
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 raden

Hela bordet/skift/expandera

CurrentRegion・Offset・Ändra storlek
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".

Värde/Formel/Format
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 in

Villkorlig 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 〜 ElseIf 〜 Else
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 If
Tomt omdöme/flera villkor
If 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 If

När du delar upp på flera sätt baserat på ett värde är "Välj fall" lättare att läsa.

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 = "Annat"
End Select

Upprepa (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.

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 bearbetar celler i ett område eller ark i en arbetsbok en efter en, använd "För varje".

For Each
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 ws

Om 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 .

Do While 〜 Loop
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
Loop
Avsluta för
For i = 2 To 100
    If Cells(i, 1).Value = "Totalt" Then Exit For   ' gå ut halvvägs
Next i

Hur 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
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 Sub

Använda kalkylbladsfunktioner med VBA

Funktioner som används i celler, som SUM och COUNTIF, kan anropas 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 tillhandahåller även funktioner som hanterar datum och strängar.

Format・Len・Vänster・Ersätt osv.
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 efter

Meddelande 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 · InputBox
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

ark bok
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 arbetsbok

Om 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".

Stoppa skärmuppdateringar
Sub RunFaster()
    Application.ScreenUpdating = False   ' Stoppa skärmuppdateringar
    ' ...Process som tar tid...
    Application.ScreenUpdating = True    ' återgå till sist
End Sub
Var beredd på fel
Sub HandleErrors()
    On Error GoTo ErrHandler
    Worksheets("stämma").Range("A1").Value = "OK"
    Exit Sub
ErrHandler:
    MsgBox "Jag fick ett fel:" & Err.Description
End Sub

Kombinerat 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.

Försäljningskontroll
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 Sub

Innehå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.