Johdatus makroihin ja VBA:han

Kuinka aloittaa Excel VBA:n käyttö
Luettelo usein käytetyistä koodeista

Olemme koonneet yhteen VBA:n kirjoittamisen aloittamisen valmistelut ja usein käytetyt peruskoodit. Esittelemme esimerkkejä, joita voit kopioida ja kokeilla, mukaan lukien solu-/aluemääritykset, muuttujat, ehdollinen haarautuminen, toisto ja funktioiden kirjoittaminen.

Jos haluat tietää, mitä makrot ja VBA ovat, katso ensin Makrot/VBA-esittelyartikkeli.

Kehitysympäristön valmistelu (Windows)

Et tarvitse muita ohjelmistoja VBA:n kirjoittamiseen. Kirjoita se Exceliin kohtaan VBE(Visual Basic Editor) ja suorita se sellaisenaan. Valmistele ensin seuraavat vain kerran.

1. Näytä kehittäjä-välilehti

Avaa "Tiedosto" → "Asetukset" → "Muokkaa nauhaa", valitse "Kehittäjä" oikealla olevasta "Päävälilehdet" -luettelosta ja paina "OK". "Kehittäjä"-välilehti tulee näkyviin nauhaan.

2. Avaa VBE

Napsauta "Visual Basic" "Kehittäjä"-välilehdellä.Alt+F11Mutta voin avata sen. Painamalla sitä uudelleen palaat Excel-näyttöön.

3. Lisää vakiomoduuli

Valitse VBE-valikosta "Lisää" → "Standard Module". Vasemmanpuoleiseen projektiin luodaan "Moduuli1" ja oikealle voi kirjoittaa koodia. Tässä vakiomoduulissa kirjoitetaan tavalliset makrot.

4. Ota käyttöön "Pakota muuttujan ilmoitus"

Valitse "Pakota muuttujan ilmoitus" VBE:n "Työkalut" → "Asetukset" → "Muokkaa" -välilehdestä. Seuraava rivi lisätään automaattisesti juuri luodun moduulin alkuun, ja näyttöön tulee virheilmoitus, joka ilmoittaa, jos olet kirjoittanut muuttujan nimen väärin.

moduulin yläosa
Option Explicit   ' Lisää moduulin alkuun, jotta muuttujat on määriteltävä Dim-lauseella.

5. Kirjoita ja suorita

Kun olet kirjoittanut koodin, napsauta kohtaa Sub ~ End Sub ja paina sitten työkalupalkissa "▶" (Sub/Run User Form) taiF5Paina Excel-näytöstä "Makrot" (Alt+F8) valitaksesi nimen ja suorittaaksesi sen.

Jos haluat tarkistaa väliarvot, siirry kohtaan VBE:n "View" → "Immediate Window" (Ctrl+G) ja kirjoita koodiin "Debug.Print variable name", arvo näkyy siellä.

6. Tallenna makrokäyttöisenä työkirjana (.xlsm)

Valitse työkirjalle, johon kirjoitit VBA:n, "Tallenna nimellä" "Excel-makroa tukeva työkirja (*.xlsm)". Jos tallennat sen tavallisena .xlsx-tiedostona, kirjoittamasi koodi katoaa.

Kun avaat työkirjan ja saat viestin "Turvallisuusvaroitus: makrot on poistettu käytöstä", napsauta "Ota sisältö käyttöön" vain, jos luot työkirjan tai luotat siihen. Makrot voivat olla estetty sähköpostista tai Internetistä tallennetuissa tiedostoissa. Napsauta siinä tapauksessa tiedostoa hiiren kakkospainikkeella → valitse "Ominaisuudet" ja valitse "Salli".

Makrolla tehtyjä muutoksia ei voi kumota painamalla Ctrl+Z.Kun kokeilet sitä, käytä kopiota työkirjasta tai harjoitustietoja.

Macissa avaa kehittäjävälilehti valitsemalla "Excel"-valikko → "Preferences" → "Ribbon and Toolbar" ja avaa VBE kehittäjä-välilehden Visual Basicissa.

MacrowHarjoittele selaimen käyttöäHarjoittele kehitysvälilehden näyttämisestä koodin suorittamiseen →

Pikaopas luettelo usein käytetyistä koodeista

Jos osaat lukea näin paljon, pystyt lukemaan monia tekoälyn luomia tallennettuja makroja ja koodeja. Yksityiskohtaiset ohjeet jokaiselle esitetään alla olevissa osioissa.

Kuinka kirjoittaamerkitys
Sub MacroName() 〜 End SubMakron alku ja loppu (menettely)
' Kommentoi' Huomautukset, joita ei suoriteta rivin loppuun
Dim item As LongValmistele muuttuja (pitkä on kokonaisluku)
Set item = Worksheets("vastaa")Aseta arkit, solut jne. muuttujiksi
Range("A1")Solu A1
Range("A1:C5")Alue A1 - C5
Cells(row, column)Määritä solut rivin/sarakkeen numeron mukaan
Cells(Rows.Count, 1).End(xlUp).RowViimeinen rivi, jossa on sarakkeen A tiedot
.Valuesolun arvo
If condition Then 〜 End IfSuorita vain, kun ehdot täyttyvät
For i = 1 To 10 〜 Next itoista tietty määrä kertoja
For Each item In targetRange 〜 NextKäsittele solut alueella yksitellen
Function MacroName() … End FunctionKotitekoinen funktio, joka palauttaa arvon
WorksheetFunction.Sum(targetRange)Taulukkofunktioiden käyttäminen VBA:n kanssa
MsgBox "hahmoja"näytä viesti

Perusmuoto Makrot (Sub) ja kommentit

Makrot alkaa sanalla "Sub macro name()" ja päättyy "End Sub". Tänä aikana kirjoitetut komennot suoritetaan järjestyksessä ylhäältä. Japania voidaan käyttää myös makrojen nimissä.

Makrojen perusmuoto
Sub SayHello()
    ' Tämä rivi on kommentoitu (ei suoritettu)
    MsgBox "Hei"
End Sub

「'” (yksi lainaus) rivin loppuun on kommentti.. Kun kirjoitat mitä olet tekemässä, voit lukea sen myöhemmin tai välittää sen jollekin toiselle.

Käytä "Soita" kutsuaksesi muita makroja.

kutsu Makrot
Sub RunAll()
    Call CheckSales     ' kutsu toinen Makrot
    Call SayHello
End Sub

Kuinka kirjoittaa muuttujia ja vakioita

Muuttujat ovat laatikoita, joihin tallennetaan arvoja, joita lasketaan tai joita käytetään monta kertaa. Valmistele se käyttämällä "Dim muuttujan nimi Tyyppinä" ja syötä arvo "=":lla.

Valmistele ja käytä muuttujia
Sub VariablesExample()
    Dim total As Long        ' kokonaisluku
    Dim customer As String   ' merkkijono
    Dim price As Double      ' numerot desimaalien kanssa
    Dim today As Date        ' Päivämäärä
    Dim finished As Boolean  ' Totta vai tarua

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

    Range("A1").Value = customer & ":" & total & "asia"
End Sub
homettaMitä laittaa
LongKokonaisluku (rivin numero, kohteiden määrä jne.)
DoubleNumerot, mukaan lukien desimaalit (summat, prosentit jne.)
Stringmerkkijono
DatePäivämäärä/aika
BooleanTrue / False
VariantKaikki mahtuu (kun et päätä tyyppiä)
Worksheet / RangeArkki/solu (lisää sarjan kanssa)

Kun tallennat "asioita" (objekteja), kuten taulukoita tai soluja muuttujiin, lisää "Aseta" alussa. Jos unohdat kiinnittää sen, tapahtuu virhe, johon usein kompastelen.

Laita arkkisolut muuttujiin
Dim ws As Worksheet
Set ws = Worksheets("vastaa")    ' Lisää arkit ja solut valitsemalla Set
ws.Range("A1").Value = "Kokonaismyynti"

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

Arvoille, jotka eivät muutu prosessin aikana, kuten kulutusverokanta, jos käytät "Const"-arvoa tehdäksesi siitä vakio, sinun tarvitsee vaihtaa vain yksi paikka, kun muutat sitä.

vakio
Const TAX_RATE As Double = 0.1   ' Arvo, joka ei muutu prosessin aikana

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

Kuinka määrittää solut/alueet

Yleisin asia VBA:ssa kirjoittaa on solujen määrittäminen. 「Range("A1")" on solun osoite ja "Solut (rivi, sarake)" on määritetty numerolla.Solut, jotka voidaan määrittää numerolla, ovat hyödyllisiä siirrettäessä rivejä yksitellen toiston aikana.

Määritetään solut/alueet
Range("A1").Value = 100                     ' A1
Range("A1:C3").Value = 0                    ' Ryhmitetty ryhmiin A1-C3
Range("A:A").Font.Bold = True               ' Koko sarake A
Range("2:2").Font.Bold = True               ' koko toinen rivi
Cells(2, 3).Value = "C2"                     ' 2. rivi/3. sarake (C2)
Range(Cells(1, 1), Cells(5, 3)).Select      ' A1〜C5
Worksheets("vastaa").Range("A1").Value = "Yhteensä" ' Määritä arkki

Jos et kirjoita taulukon nimeä, kohdistetaan tällä hetkellä avoinna olevaan taulukkoon (aktiivinen taulukko). Kun käytät toista arkkia, napsautaWorksheets("arkin nimi").”edessä.

etsi viimeinen rivi

Jos taulukossa rivien määrä vaihtuu kuukausittain, tarkista, kuinka paljon dataa on ennen käsittelyä. Näin voit kirjoittaa ensimmäisen dataa sisältävän solun rivinumeron, alkaen sarakkeen A alimmasta solusta ja ylöspäin.

viimeinen rivi
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row   ' Hae sarakkeen A alareunasta ylöspäin

Range("A2:A" & lastRow).Font.Bold = True     ' Otsikon alaosasta viimeiselle riville

Koko pöytä/muutos/laajenna

CurrentRegion・Siirtymä・Muuta kokoa
Range("A1").CurrentRegion.Select       ' Koko pöytä yhdistettynä A1:een
Range("A1").Offset(1, 0).Value = "pohja"    ' 1 rivi alapuolella (A2)
Range("A1").Offset(0, 2).Value = "oikein"    ' 2. rivi oikea (C1)
Range("A1").Resize(3, 2).Select         ' 3 riviä x 2 saraketta A1:stä (A1:B3)

Arvojen, kaavojen ja muotojen manipulointi

Solujen arvot luetaan ja kirjoitetaan käyttämällä ".Arvoa". Syötä kaavalle sama merkkijono kuin syöttäessäsi sitä Excelissä kohtaan ".Formula".

Arvo/kaava/muoto
Range("D2").Formula = "=B2*C2"                  ' syötä kaava
Range("A2:D10").ClearContents                   ' Poista vain arvo (muoto säilyy)
Range("A1").Font.Bold = True                    ' Lihavointi
Range("A1").Interior.Color = RGB(255, 242, 204) ' täyteväri
Range("D2:D10").NumberFormat = "#,##0"          ' 3-numeroinen erotin
Range("A1:D10").Copy Destination:=Worksheets("varata").Range("A1")  ' kopioi ja liitä

Ehdollinen haarautuminen (If · Select Case)

Käytä "Jos ~ Sitten" erottaaksesi käsittely olosuhteiden perusteella. Älä unohda "Lopeta jos" lopussa.Käytä "ElseIf" jakaa ehto useisiin ehtoihin ja "Else", kun mikään ehdoista ei ole voimassa.

If 〜 ElseIf 〜 Else
If Range("B2").Value >= 80 Then
    Range("C2").Value = "Läpäisty"
ElseIf Range("B2").Value >= 60 Then
    Range("C2").Value = "Uudelleenvahvistus"
Else
    Range("C2").Value = "Epäonnistui"
End If
Tyhjä tuomio/useita ehtoja
If Range("A2").Value = "" Then
    MsgBox "A2 on tyhjä"
End If

' Ja (molemmat), tai (joko), <> (ei yhtä suuri)
If Range("B2").Value >= 60 And Range("C2").Value <> "Poissaolo" Then
    Range("D2").Value = "OK"
End If

Kun jaetaan useisiin eri tavoihin yhden arvon perusteella, "Select Case" on helpompi lukea.

Select Case
Select Case Range("B2").Value
    Case "Tokio", "Yokohama"
        Range("C2").Value = "Kanto"
    Case "Osaka", "Kioto"
        Range("C2").Value = "Kansai"
    Case Else
        Range("C2").Value = "Muut"
End Select

Toista (For · For Each · Do While)

Saman käsittelyn suorittaminen jokaiselle riville on silloin, kun VBA osoittaa eniten tehoaan."For ~ Next" toistaa, kun muuttujaa i kasvatetaan yhdellä.

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

Kun käsittelet alueen soluja tai työkirjan taulukoita yksitellen, käytä "Kullekin".

For Each
Dim cell As Range
For Each cell In Range("A2:A10")
    If cell.Value = "" Then
        cell.Interior.Color = RGB(255, 199, 206)   ' täytä kohdat punaisella
    End If
Next cell

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets   ' kaikki lakanat
    ws.Range("A1").Font.Bold = True
Next ws

Jos loppuriviä ei ole määritetty, käytä "Do While" -toimintoa toistaaksesi niin kauan kuin ehdot täyttyvät.Jos unohdat "r = r + 1", et voi lopettaa.Kun se ei lopu,EscTaiCtrl+BreakVoit keskeyttää sen painikkeella.

Do While 〜 Loop
Dim r As Long
r = 2
Do While Cells(r, 1).Value <> ""   ' Kunnes sarake A on tyhjä
    Cells(r, 5).Value = "Vahvistettu"
    r = r + 1
Loop
Poistu For
For i = 2 To 100
    If Cells(i, 1).Value = "Yhteensä" Then Exit For   ' poistu puolivälistä
Next i

Kuinka kirjoittaa ja käyttää funktioita

Kun puhumme VBA:n "funktioista", niitä on kolmea tyyppiä:

Luo oma funktio (Function)

Jos luot sen käyttämällä "Function", siitä tulee funktio, joka palauttaa lasketun arvon. Jos laitat arvon funktion nimeen, se on tulos.Jos kirjoitat sen vakiomoduuliin, voit kirjoittaa "=Summa veroineen (A2)" soluun ja käyttää sitä samalla tavalla kuin taulukkofunktiota.

Function
Function PriceWithTax(price As Double) As Double
    PriceWithTax = price * 1.1     ' Toiminnon nimeen antamasi arvo tulee tulokseksi.
End Function

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

Taulukkofunktioiden käyttäminen VBA:n kanssa

Soluissa käytettyjä toimintoja, kuten SUM ja COUNTIF, voidaan kutsua "WorksheetFunction" -toiminnolla.

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"), "Tokio")

VBA-toiminnot

VBA tarjoaa myös toimintoja, jotka käsittelevät päivämääriä ja merkkijonoja.

Muoto・Lin・Vasen・Vaihda jne.
Range("A1").Value = Format(Date, "yyyy-mm-dd")   ' tämän päivän päivämäärä tekstissä
Range("A2").Value = Now                           ' nykyinen päivämäärä ja aika
Range("A3").Value = Len("Komorebi Shop")             ' Merkkien määrä → 13
Range("A4").Value = Left("2026-10-06", 4)         ' 4 merkkiä vasemmalta → 2026
Range("A5").Value = Replace("Tokio Haara", "Haara", "") ' Korvaa → Tokio
Range("A6").Value = Trim("  Tokio  ")               ' Poista välilyönnit ennen ja jälkeen

Viesti ja syöttö (MsgBox · InputBox)

Käytetään ilmoittamaan käsittelyn päättymisestä tai vahvistamaan ennen suoritusta. Jos käytät "InputBoxia", voit syöttää kuukauden, vastuuhenkilön jne. aina, kun suoritat ohjelman.

MsgBox · InputBox
MsgBox "Se on ohi"

If MsgBox("Haluatko ajaa sen?", vbYesNo) = vbNo Then Exit Sub

Dim answer As String
answer = InputBox("Kuinka monta kuukautta?")
Range("A1").Value = answer & "Kuukausittain"

Arkki-/kirjatoiminnot

arkkikirja
Worksheets("Myynti").Activate                    ' vaihtaa arkkia
Worksheets("Myynti").Copy After:=Worksheets(Worksheets.Count)  ' kopio arkki
ActiveSheet.Name = "Loka"                        ' Vaihda arkin nimi
Worksheets.Add After:=Worksheets(Worksheets.Count)          ' lisää arkki

Dim book As Workbook
Set book = Workbooks.Open(ThisWorkbook.Path & "\Tokio_October.xlsx")
book.Close SaveChanges:=False                    ' Sulje tallentamatta
ThisWorkbook.Save                                ' Tallenna tämä työkirja

Jos käsittelyä on paljon, voit lopettaa näytön päivittämisen ja se valmistuu nopeammin. Voit kirjoittaa prosessin virheen tapahtuessa käyttämällä "On Error GoTo" -toimintoa.

Pysäytä näytön päivitykset
Sub RunFaster()
    Application.ScreenUpdating = False   ' Pysäytä näytön päivitykset
    ' ...aikaa vievä prosessi...
    Application.ScreenUpdating = True    ' palata viimeiseen
End Sub
Varaudu virheisiin
Sub HandleErrors()
    On Error GoTo ErrHandler
    Worksheets("vastaa").Range("A1").Value = "OK"
    Exit Sub
ErrHandler:
    MsgBox "Sain virheen:" & Err.Description
End Sub

Yhdistetty esimerkki: Myyntitaulukon laskenta ja väritys

Yhdistämällä tähänastisen koodin saamme tämän: "Myynti"-välilehdellä taulukossa, jossa tuotteen nimi sarakkeessa A, määrä sarakkeessa B ja yksikköhinta sarakkeessa C, lasketaan sarakkeen D määrä ja värjätään 100 000 jeniä tai enemmän rivit vihreiksi.

Myyntitarkastus
Sub CheckSales()
    Dim ws As Worksheet
    Dim lastRow As Long, i As Long
    Set ws = Worksheets("Myynti")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        ' Määrä = määrä × yksikköhinta
        ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
        ' Jos se on yli 100 000 jeniä, se on vihreä.
        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 & "laskenut rivin"
End Sub

Sisältää muuttujat (Dim), arkin määrittelyn (Set), viimeisen rivin, toiston (For) ja ehdollisen haarautumisen (If). Jos osaat lukea "mitä missäkin solussa tehdään" rivi riviltä, voit muuttaa rivien määrää ja ehtoja taulukkoasi sopivaksi.

Vaikka sinulla on tekoälyn luontikoodi, jos osaat lukea tämän muodon, voit tarkistaa itse, mikä sarake lasketaan ja täyttyvätkö ehdot.

Lue lisää

Suosittelemme tarkistamaan koodiluettelon, kuinka se kirjoitetaan, ja sitten kokeilla sitä opetusmateriaalitiedoston avulla. Tämän vaiheittaisen johdantokirjan avulla voit harjoitella kaikkea makrojen tallentamisesta muuttujiin, toistoon ja ehdolliseen haarautumiseen yhdistettyjen esimerkkien avulla.

Niille, jotka kokevat olevansa jumissa tekemässä sitä yksin, tai niille, jotka haluavat keskustella työnsä automatisoitavista kohdista, on myös mahdollisuus osallistua ohjaajan opettamaan kurssiin.

Opintomenetelmän valinta esitellään myös artikkelissa Kuinka opiskella makroja ja VBA:ta.