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.
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.
Ø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 skrive | mening |
|---|---|
| Sub MacroName() 〜 End Sub | Begynnelsen og slutten av en Makroer (prosedyre) |
| ' Kommentar | ' Notater som ikke utføres fra til slutten av linjen |
| Dim item As Long | Forbered 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).Row | Den siste raden med data i kolonne A |
| .Value | celleverdi |
| If condition Then 〜 End If | Utfør kun når betingelsene er oppfylt |
| For i = 1 To 10 〜 Next i | gjenta et bestemt antall ganger |
| For Each item In targetRange 〜 Next | Behandle celler innen rekkevidde én etter én |
| Function MacroName() … End Function | Hjemmelaget 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.
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.
Sub RunAll()
Call CheckSales ' kall en annen Makroer
Call SayHello
End SubHvordan 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 "=".
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| mugg | Hva skal man legge inn |
|---|---|
| Long | Heltall (radnummer, antall elementer osv.) |
| Double | Tall inkludert desimaler (beløp, prosenter osv.) |
| String | streng |
| Date | Dato/klokkeslett |
| Boolean | True / False |
| Variant | Alt kan passe (når du ikke bestemmer deg for type) |
| Worksheet / Range | Ark/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.
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.ClearContentsFor 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.
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.
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 arkHvis 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.
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 linjeHele bordet/skift/utvid
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".
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 innBetinget 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 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 IfIf 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 IfNår du deler inn på flere måter basert på én verdi, er "Select Case" lettere å lese.
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 SelectGjenta (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.
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 arbeidsbok én etter én, bruk «For hver».
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 wsHvis 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 .
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
LoopFor i = 2 To 100
If Cells(i, 1).Value = "Totalt" Then Exit For ' gå ut midtveis
Next iHvordan 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 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 SubBruke regnearkfunksjoner med VBA
Funksjoner som brukes i celler, som SUM og COUNTIF, kan kalles opp 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-funksjoner
VBA har også funksjoner som håndterer datoer og strenger.
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 etterMelding 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 "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
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 arbeidsbokenHvis 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".
Sub RunFaster()
Application.ScreenUpdating = False ' Stopp skjermoppdateringer
' ...Prosess som tar tid...
Application.ScreenUpdating = True ' tilbake til sist
End SubSub HandleErrors()
On Error GoTo ErrHandler
Worksheets("stemme").Range("A1").Value = "OK"
Exit Sub
ErrHandler:
MsgBox "Jeg fikk en feil:" & Err.Description
End SubKombinert 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.
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 SubInneholder 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.