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.
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.
Harjoittele 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 kirjoittaa | merkitys |
|---|---|
| Sub MacroName() 〜 End Sub | Makron alku ja loppu (menettely) |
| ' Kommentoi | ' Huomautukset, joita ei suoriteta rivin loppuun |
| Dim item As Long | Valmistele 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).Row | Viimeinen rivi, jossa on sarakkeen A tiedot |
| .Value | solun arvo |
| If condition Then 〜 End If | Suorita vain, kun ehdot täyttyvät |
| For i = 1 To 10 〜 Next i | toista tietty määrä kertoja |
| For Each item In targetRange 〜 Next | Käsittele solut alueella yksitellen |
| Function MacroName() … End Function | Kotitekoinen 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ä.
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.
Sub RunAll()
Call CheckSales ' kutsu toinen Makrot
Call SayHello
End SubKuinka 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.
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| hometta | Mitä laittaa |
|---|---|
| Long | Kokonaisluku (rivin numero, kohteiden määrä jne.) |
| Double | Numerot, mukaan lukien desimaalit (summat, prosentit jne.) |
| String | merkkijono |
| Date | Päivämäärä/aika |
| Boolean | True / False |
| Variant | Kaikki mahtuu (kun et päätä tyyppiä) |
| Worksheet / Range | Arkki/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.
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.ClearContentsArvoille, 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ä.
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.
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ä arkkiJos 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.
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 rivilleKoko pöytä/muutos/laajenna
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".
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 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 IfIf 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 IfKun jaetaan useisiin eri tavoihin yhden arvon perusteella, "Select Case" on helpompi lukea.
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 SelectToista (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ä.
Dim i As Long
For i = 2 To 10
Cells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).Value
Next iKun käsittelet alueen soluja tai työkirjan taulukoita yksitellen, käytä "Kullekin".
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 wsJos 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.
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
LoopFor i = 2 To 100
If Cells(i, 1).Value = "Yhteensä" Then Exit For ' poistu puolivälistä
Next iKuinka 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 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 SubTaulukkofunktioiden käyttäminen VBA:n kanssa
Soluissa käytettyjä toimintoja, kuten SUM ja COUNTIF, voidaan kutsua "WorksheetFunction" -toiminnolla.
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.
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älkeenViesti 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 "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
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ökirjaJos 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.
Sub RunFaster()
Application.ScreenUpdating = False ' Pysäytä näytön päivitykset
' ...aikaa vievä prosessi...
Application.ScreenUpdating = True ' palata viimeiseen
End SubSub HandleErrors()
On Error GoTo ErrHandler
Worksheets("vastaa").Range("A1").Value = "OK"
Exit Sub
ErrHandler:
MsgBox "Sain virheen:" & Err.Description
End SubYhdistetty 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.
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 SubSisä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.