Introduksjon til makroer og VBA

Hvordan komme i gang med Excel VBA
Liste over ofte brukte koder

Vi har oppsummert forberedelsene til å begynne å skrive VBA og de grunnleggende kodene som ofte brukes. Vi vil introdusere eksempler som du kan kopiere og prøve ut, inkludert celle-/områdespesifikasjon, variabler, betinget forgrening, repetisjon og hvordan du skriver funksjoner.

Hvis du vil vite hva makroer og VBA er, kan du først se Makroer/VBA introduksjonsartikkel.

Forberede utviklingsmiljøet (Windows)

Du trenger ingen annen programvare for å skrive VBA. Skriv den i VBE(Visual Basic Editor) i Excel og kjør den som den er. Forbered først følgende bare én gang.

1. Vis utviklerfanen

Åpne "Fil" → "Alternativer" → "Tilpass bånd", merk av for "Utvikler" i listen over "Hovedfaner" til høyre, og trykk "OK". En "Utvikler"-fane vises på båndet.

2. Åpne VBE

Klikk "Visual Basic" på "Utvikler"-fanen.Alt+F11Men jeg kan åpne den. Hvis du trykker på den igjen, kommer du tilbake til Excel-skjermen.

3. Legg til standardmodul

Velg "Sett inn" → "Standardmodul" fra VBE-menyen. "Module1" vil bli opprettet i prosjektet til venstre, og du vil kunne skrive kode til høyre. Vanlige makroer skrives i denne standardmodulen.

4. Slå på «Tving variabeldeklarasjon»

Kryss av for "Force variabeldeklarasjon" i VBEs "Verktøy" → "Alternativer" → "Rediger"-fanen. Følgende linje settes automatisk inn i begynnelsen av den nyopprettede modulen, og en feilmelding vil vises for å fortelle deg om du har skrevet feil et variabelnavn.

toppen av modulen
Option Explicit   ' Plasser øverst i modulen for å kreve at variabler deklareres med Dim.

5. Skriv og utfør

Etter å ha skrevet koden, klikk inne Sub ~ End Sub og trykk deretter "▶" (Sub/Run User Form) på verktøylinjen, ellerF5Trykk Fra Excel-skjermen, klikk "Makroer" (Alt+F8) for å velge et navn og kjøre det.

Hvis du vil sjekke mellomverdier, gå til VBEs "View" → "Immediate Window" (Ctrl+G) og skriv "Debug.Print variabelnavn" i koden, verdien vil vises der.

6. Lagre som makroaktivert arbeidsbok (.xlsm)

For arbeidsboken du skrev VBA i, velg "Excel makroaktivert arbeidsbok (*.xlsm)" i "Lagre som". Hvis du lagrer den som en vanlig .xlsx-fil, vil koden du skrev gå tapt.

Når du åpner arbeidsboken, hvis du mottar en melding som sier "Sikkerhetsadvarsel: Makroer har blitt deaktivert", klikker du på "Aktiver innhold" bare hvis arbeidsboken er en du har laget eller du stoler på. Makroer kan være blokkert i filer som er lagret fra e-post eller Internett. I så fall, høyreklikk på filen → velg "Egenskaper" og merk av for "Tillat".

Endringer gjort ved hjelp av en Makroer kan ikke angres med Ctrl+Z.Når du prøver det, bruk en kopi av arbeidsboken eller øvingsdata.

For Mac, vis utviklerfanen ved å velge "Excel"-menyen → "Preferences" → "Ribbon and Toolbar", og åpne VBE i "Visual Basic" på utviklerfanen.

MacrowØv på å bruke nettleserenØv deg fra å vise utviklingsfanen til å kjøre kode →

En rask referanseliste over ofte brukte koder

Hvis du kan lese så mye, vil du kunne lese mange av de registrerte makroene og kodene som er opprettet av AI. Detaljerte instruksjoner for hver er introdusert i avsnittene nedenfor.

Hvordan skrivemening
Sub MacroName() 〜 End SubBegynnelsen og slutten av en Makroer (prosedyre)
' Kommentar' Notater som ikke utføres fra til slutten av linjen
Dim item As LongForbered en variabel (Lang er et heltall)
Set item = Worksheets("stemme")Sett ark, celler osv. inn i variabler
Range("A1")Celle A1
Range("A1:C5")Rekkevidde fra A1 til C5
Cells(row, column)Spesifiser celler etter rad-/kolonnenummer
Cells(Rows.Count, 1).End(xlUp).RowDen siste raden med data i kolonne A
.Valuecelleverdi
If condition Then 〜 End IfUtfør kun når betingelsene er oppfylt
For i = 1 To 10 〜 Next igjenta et bestemt antall ganger
For Each item In targetRange 〜 NextBehandle celler innen rekkevidde én etter én
Function MacroName() … End FunctionHjemmelaget funksjon som returnerer en verdi
WorksheetFunction.Sum(targetRange)Bruke regnearkfunksjoner med VBA
MsgBox "tegn"vis melding

Grunnleggende form for Makroer (Sub) og kommentarer

Makroen starter med "Sub macro name()" og slutter med "End Sub". Kommandoene skrevet i løpet av denne tiden vil bli utført i rekkefølge fra toppen. Japansk kan også brukes i makronavn.

Grunnleggende form for Makroer
Sub SayHello()
    ' Denne linjen er kommentert (ikke utført)
    MsgBox "Hei"
End Sub

「'” (enkelt sitat) på slutten av linjen er en kommentar. Hvis du skriver ned hva du gjør vil hjelpe deg å lese den senere eller gi den videre til noen andre.

Bruk "Ring" for å ringe andre makroer.

ringe Makroer
Sub RunAll()
    Call CheckSales     ' kall en annen Makroer
    Call SayHello
End Sub

Hvordan skrive variabler og konstanter

Variabler er bokser som lagrer verdier som blir beregnet eller verdier som brukes mange ganger. Forbered den med "Dim variabelnavn som type" og skriv inn verdien med "=".

Forbered og bruk variabler
Sub VariablesExample()
    Dim total As Long        ' heltall
    Dim customer As String   ' streng
    Dim price As Double      ' tall med desimaler
    Dim today As Date        ' Dato
    Dim finished As Boolean  ' Sant eller usant

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

    Range("A1").Value = customer & ":" & total & "saken"
End Sub
muggHva skal man legge inn
LongHeltall (radnummer, antall elementer osv.)
DoubleTall inkludert desimaler (beløp, prosenter osv.)
Stringstreng
DateDato/klokkeslett
BooleanTrue / False
VariantAlt kan passe (når du ikke bestemmer deg for type)
Worksheet / RangeArk/celle (sett inn med sett)

Når du lagrer "ting" (objekter) som ark eller celler i variabler, legg til "Sett" i begynnelsen. Hvis du glemmer å legge den ved, vil det oppstå en feil, det er der jeg ofte snubler.

Sett arkceller i variabler
Dim ws As Worksheet
Set ws = Worksheets("stemme")    ' Sett inn ark og celler med Set
ws.Range("A1").Value = "Totalt salg"

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

For verdier som ikke endres i løpet av prosessen, for eksempel forbruksavgiftssatsen, hvis du bruker "Const" for å gjøre det til en konstant, trenger du bare å endre ett sted når du endrer det.

konstant
Const TAX_RATE As Double = 0.1   ' En verdi som ikke endres under prosessen

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

Hvordan spesifisere celler/områder

Det vanligste å skrive i VBA er å spesifisere celler. 「Range("A1")" er celleadressen, og "Celler (rad, kolonne)" er spesifisert med nummer.Celler, som kan spesifiseres etter antall, er nyttig når du skifter rader én etter én under repetisjon.

Spesifisere celler/områder
Range("A1").Value = 100                     ' A1
Range("A1:C3").Value = 0                    ' Gruppert i A1-C3
Range("A:A").Font.Bold = True               ' Hele kolonne A
Range("2:2").Font.Bold = True               ' hele andre rad
Cells(2, 3).Value = "C2"                     ' 2. rad/3. kolonne (C2)
Range(Cells(1, 1), Cells(5, 3)).Select      ' A1〜C5
Worksheets("stemme").Range("A1").Value = "Totalt" ' Spesifiser ark

Hvis du ikke skriver et arknavn, vil arket som er åpent (aktivt ark) bli målrettet. Når du bruker et annet ark, klikker duWorksheets("arknavn")." foran.

finn den siste raden

For tabeller hvor antall rader endres hver måned, sjekk hvor mye data det er før behandling. Dette er en måte å skrive på for å finne radnummeret til den første cellen som inneholder data, ved å starte fra den nederste cellen i kolonne A og jobbe oppover.

siste linje
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row   ' Søk fra bunnen av kolonne A til toppen

Range("A2:A" & lastRow).Font.Bold = True     ' Fra bunnen av overskriften til siste linje

Hele bordet/skift/utvid

CurrentRegion・Offset・Endre størrelse
Range("A1").CurrentRegion.Select       ' Hele bordet koblet til A1
Range("A1").Offset(1, 0).Value = "bunnen"    ' 1 linje under (A2)
Range("A1").Offset(0, 2).Value = "høyre"    ' 2. rad høyre (C1)
Range("A1").Resize(3, 2).Select         ' 3 rader x 2 kolonner fra A1 (A1:B3)

Manipulere verdier, formler og formater

Celleverdier leses og skrives med ".Value". For formelen, skriv inn samme streng som når du skriver den inn i Excel i ".Formula".

Verdi/Formel/Format
Range("D2").Formula = "=B2*C2"                  ' skriv inn formelen
Range("A2:D10").ClearContents                   ' Slett bare verdien (formatet forblir)
Range("A1").Font.Bold = True                    ' Fet
Range("A1").Interior.Color = RGB(255, 242, 204) ' fyllfarge
Range("D2:D10").NumberFormat = "#,##0"          ' 3-sifret skilletegn
Range("A1:D10").Copy Destination:=Worksheets("reserve").Range("A1")  ' kopier og lim inn

Betinget forgrening (If · Select Case)

Bruk "If ~ Then" for å skille behandling basert på forhold. Ikke glem "End If" på slutten.Bruk «ElseIf» for å dele betingelsen i flere betingelser, og «Else» når ingen av betingelsene gjelder.

If 〜 ElseIf 〜 Else
If Range("B2").Value >= 80 Then
    Range("C2").Value = "Bestått"
ElseIf Range("B2").Value >= 60 Then
    Range("C2").Value = "Bekreftelse på nytt"
Else
    Range("C2").Value = "Mislykket"
End If
Blank dom/flere forhold
If Range("A2").Value = "" Then
    MsgBox "A2 er blank"
End If

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

Når du deler inn på flere måter basert på én verdi, er "Select Case" lettere å lese.

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

Gjenta (For · For Each · Do While)

Å utføre den samme behandlingen for hver rad er der VBA viser sin mest kraft."For ~ Neste" gjentas mens variabel i økes 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 arbeidsbok én etter én, bruk «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)   ' fyll ut de tomme feltene 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 sluttraden ikke er bestemt, bruk "Do While" for å gjenta så lenge betingelsene er oppfylt.Hvis du glemmer "r = r + 1", vil du ikke kunne stoppe.Når det ikke stopper,EscEllerCtrl+BreakDu kan avbryte den med .

Do While 〜 Loop
Dim r As Long
r = 2
Do While Cells(r, 1).Value <> ""   ' Inntil kolonne A er tom
    Cells(r, 5).Value = "Bekreftet"
    r = r + 1
Loop
Avslutt for
For i = 2 To 100
    If Cells(i, 1).Value = "Totalt" Then Exit For   ' gå ut midtveis
Next i

Hvordan skrive og bruke funksjoner

Når vi snakker om "funksjoner" i VBA, er det tre typer:

Lag din egen funksjon (Funksjon)

Hvis du oppretter den ved hjelp av "Function", vil den bli en funksjon som returnerer den beregnede verdien. Hvis du legger inn en verdi i funksjonsnavnet, er det resultatet.Hvis du skriver det i en standardmodul, kan du skrive inn "=Beløp inkludert skatt (A2)" i en celle og bruke det på samme måte som en regnearkfunksjon.

Function
Function PriceWithTax(price As Double) As Double
    PriceWithTax = price * 1.1     ' Verdien du legger inn i funksjonsnavnet blir resultatet.
End Function

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

Bruke regnearkfunksjoner med VBA

Funksjoner som brukes i celler, som SUM og COUNTIF, kan kalles opp 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-funksjoner

VBA har også funksjoner som håndterer datoer og strenger.

Format・Len・Venstre・Erstatt osv.
Range("A1").Value = Format(Date, "yyyy-mm-dd")   ' dagens dato i tekst
Range("A2").Value = Now                           ' gjeldende dato og klokkeslett
Range("A3").Value = Len("Komorebi Shop")             ' Antall tegn → 13
Range("A4").Value = Left("2026-10-06", 4)         ' 4 tegn fra venstre → 2026
Range("A5").Value = Replace("Tokyo gren", "gren", "") ' Erstatt → Tokyo
Range("A6").Value = Trim("  Tokyo  ")               ' Slett mellomrommene før og etter

Melding og inndata (MsgBox · InputBox)

Brukes til å varsle om slutten av behandlingen eller for å bekrefte før Kjør. Hvis du bruker "InputBox", kan du legge inn måned, ansvarlig, osv. hver gang du kjører programmet.

MsgBox · InputBox
MsgBox "Det er over"

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

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

Ark/bokdrift

ark bok
Worksheets("Salg").Activate                    ' bytte ark
Worksheets("Salg").Copy After:=Worksheets(Worksheets.Count)  ' kopiark
ActiveSheet.Name = "Okt"                        ' Endre arknavn
Worksheets.Add After:=Worksheets(Worksheets.Count)          ' legg til ark

Dim book As Workbook
Set book = Workbooks.Open(ThisWorkbook.Path & "\Tokyo_October.xlsx")
book.Close SaveChanges:=False                    ' Lukk uten å lagre
ThisWorkbook.Save                                ' Lagre denne arbeidsboken

Hvis det er mye behandling som skal gjøres, kan du slutte å oppdatere skjermen, og den blir ferdig raskere. Du kan skrive prosessen når det oppstår en feil ved å bruke "On Error GoTo".

Stopp skjermoppdateringer
Sub RunFaster()
    Application.ScreenUpdating = False   ' Stopp skjermoppdateringer
    ' ...Prosess som tar tid...
    Application.ScreenUpdating = True    ' tilbake til sist
End Sub
Vær forberedt på feil
Sub HandleErrors()
    On Error GoTo ErrHandler
    Worksheets("stemme").Range("A1").Value = "OK"
    Exit Sub
ErrHandler:
    MsgBox "Jeg fikk en feil:" & Err.Description
End Sub

Kombinert eksempel: Salgstabellberegning og fargelegging

Ved å kombinere koden så langt får vi dette: I arket «Salg», i en tabell med produktnavn i kolonne A, mengde i kolonne B, og enhetspris i kolonne C, regner du ut beløpet i kolonne D, og fargelegger radene med 100 000 yen eller mer grønne.

Salgssjekk
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øp = Antall × Enhetspris
        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 & "beregnet raden"
End Sub

Inneholder variabler (Dim), arkspesifikasjon (sett), siste rad, repetisjon (For) og betinget forgrening (If). Hvis du kan lese "hva gjøres i hvilken celle" rad for rad, kan du endre antall rader og betingelser slik at de passer til tabellen din.

Selv når du har AI-opprettingskode, hvis du kan lese denne formen, kan du selv sjekke hvilken kolonne som beregnes og om betingelsene er oppfylt.

Lær mer

Vi anbefaler å sjekke kodelisten for å se hvordan du skriver den og deretter prøve den ut ved hjelp av læremiddelfilen. Denne trinnvise introduksjonsboken lar deg øve på alt fra opptak av makroer til variabler, repetisjon og betinget forgrening med tilknyttede eksempler.

For de som føler seg fast ved å gjøre det alene, eller de som ønsker å diskutere områder av arbeidet sitt som kan automatiseres, er det også et alternativ å ta et kurs undervist av en instruktør.

Hvordan velge en studiemetode er også introdusert i Hvordan studere makroer og VBA.