Introducere în macrocomenzi și VBA
Cum să începeți cu Excel VBA
Lista codurilor utilizate frecvent
Am rezumat pregătirile pentru a începe să scrieți VBA și codurile de bază care sunt adesea folosite. Vom introduce exemple pe care le puteți copia și încerca, inclusiv specificații pentru celulă/gamă, variabile, ramificare condiționată, repetare și cum să scrieți funcții.
Dacă doriți să știți ce sunt macrocomenzile și VBA, consultați mai întâi Macrocomenzi/VBA articol introductiv.
Pregătirea mediului de Dezvoltator (Windows)
Nu aveți nevoie de niciun alt software pentru a scrie VBA. Scrieți-l în VBE(Visual Basic Editor) în Excel și executați-l așa cum este. În primul rând, pregătiți următoarele o singură dată.
1. Afișați fila dezvoltator
Deschideți „Fișier” → „Opțiuni” → „Personalizare panglică”, bifați „Dezvoltator” în lista „File principale” din dreapta și apăsați „OK”. O filă „Dezvoltator” va apărea pe panglică.
2. Deschideți VBE
Faceți clic pe „Visual Basic” în fila „Dezvoltator”.Alt+F11Dar o pot deschide. Dacă apăsați din nou, veți reveni la ecranul Excel.
3. Adăugați modul standard
Selectați „Insert” → „Standard Module” din meniul VBE. „Module1” va fi creat în proiectul din stânga și veți putea scrie cod în dreapta. Macrocomenzile obișnuite sunt scrise în acest modul standard.
4. Activați „Forțați declararea variabilei”
Bifați „Forțați declararea variabilei” în fila „Instrumente” → „Opțiuni” → „Editare” a VBE. Următoarea linie este inserată automat la începutul modulului nou creat și va fi afișat un mesaj de eroare pentru a vă anunța dacă ați introdus greșit un nume de variabilă.
Option Explicit ' La începutul modulului, impune declararea variabilelor cu Dim.5. Scrieți și executați
După ce ați scris codul, faceți clic în interiorul Sub ~ End Sub și apoi apăsați „▶” (Sub/Run User Form) din bara de instrumente sauF5Apăsați Din ecranul Excel, faceți clic pe „Macrocomenzi” (Alt+F8) pentru a selecta un nume și a-l executa.
Dacă doriți să verificați valorile intermediare, mergeți la „Vizualizare” → „Fereastra imediată” a VBE (Ctrl+G) și scrieți „Debug.Print variable name” în cod, valoarea va apărea acolo.
6. Salvați ca registru de lucru cu macrocomandă (.xlsm)
Pentru registrul de lucru în care ați scris VBA, selectați „Registrul de lucru cu macrocomandă Excel (*.xlsm)” în „Salvare ca”. Dacă îl salvați ca fișier obișnuit .xlsx, codul pe care l-ați scris se va pierde.
Când deschideți registrul de lucru, dacă primiți un mesaj care spune „Avertisment de securitate: macrocomenzile au fost dezactivate”, faceți clic pe „Activați conținutul” numai dacă registrul de lucru este unul pe care l-ați creat sau în care aveți încredere. Macrocomenzi-urile pot fi blocate în fișierele salvate de pe e-mail sau de pe Internet. În acest caz, faceți clic dreapta pe fișier → selectați „Proprietăți” și bifați „Permite”.
Modificările efectuate folosind o macrocomandă nu pot fi anulate folosind Ctrl+Z.Când îl încercați, utilizați o copie a registrului de lucru sau a datelor de exersare.
Pentru Mac, afișați fila pentru dezvoltatori selectând meniul „Excel” → „Preferințe” → „Panglă și bara de instrumente” și deschideți VBE în „Visual Basic” în fila pentru dezvoltatori.
Exersați utilizarea browseruluiExersați de la afișarea filei de Dezvoltator până la rularea codului →O listă de referință rapidă a codurilor utilizate frecvent
Dacă poți citi atât de mult, vei putea citi multe dintre macrocomenzile și codurile înregistrate create de AI. Instrucțiuni detaliate pentru fiecare sunt introduse în secțiunile de mai jos.
| Cum se scrie | sensul |
|---|---|
| Sub MacroName() 〜 End Sub | Începutul și sfârșitul unei macrocomenzi (procedură) |
| ' Comentariu | ' Note care nu sunt executate de la sfârșitul liniei |
| Dim item As Long | Pregătiți o variabilă (Long este un număr întreg) |
| Set item = Worksheets("numărătoarea") | Pune foi, celule etc. în variabile |
| Range("A1") | Celula A1 |
| Range("A1:C5") | Interval de la A1 la C5 |
| Cells(row, column) | Specificați celulele după numărul rândului/coloanei |
| Cells(Rows.Count, 1).End(xlUp).Row | Ultimul rând cu date din coloana A |
| .Value | valoarea celulei |
| If condition Then 〜 End If | Se execută numai când sunt îndeplinite condițiile |
| For i = 1 To 10 〜 Next i | repetați un anumit număr de ori |
| For Each item In targetRange 〜 Next | Procesați celulele în interval una câte una |
| Function MacroName() … End Function | Funcție de casă care returnează o valoare |
| WorksheetFunction.Sum(targetRange) | Utilizarea funcțiilor de foi de lucru cu VBA |
| MsgBox "personaje" | arata mesajul |
Forma de bază de Macrocomenzi (Sub) și comentarii
Macrocomanda începe cu „Sub Macrocomenzi name()” și se termină cu „End Sub”. Comenzile scrise în acest timp vor fi executate în ordine de sus. Japoneză poate fi folosită și în denumirile Macrocomenzi.
Sub SayHello()
' Această linie este comentată (nu este executată)
MsgBox "Bună ziua"
End Sub「'” (ghilimele simple) până la sfârșitul rândului este un comentariu. Notarea a ceea ce faci te va ajuta să-l citești mai târziu sau să-l dai altcuiva.
Utilizați „Apelați” pentru a apela alte macrocomenzi.
Sub RunAll()
Call CheckSales ' apelați o altă macrocomandă
Call SayHello
End SubCum să scrieți variabile și constante
Variabilele sunt casete care stochează valori care sunt calculate sau valori care sunt utilizate de mai multe ori. Pregătiți-l cu „Numele variabilei Dim ca tip” și introduceți valoarea cu „=".
Sub VariablesExample()
Dim total As Long ' întreg
Dim customer As String ' sfoară
Dim price As Double ' numere cu zecimale
Dim today As Date ' Data
Dim finished As Boolean ' Adevărat sau Fals
total = 12
customer = "Komorebi Shop"
price = 1200.5
today = Date
finished = False
Range("A1").Value = customer & ":" & total & "materie"
End Sub| mucegai | Ce să pui |
|---|---|
| Long | Număr întreg (numărul rândului, numărul de elemente etc.) |
| Double | Numere, inclusiv zecimale (sume, procente etc.) |
| String | sfoară |
| Date | Data/ora |
| Boolean | True / False |
| Variant | Se poate potrivi orice (când nu te hotărăști asupra unui tip) |
| Worksheet / Range | Foaie/celula (inserat cu set) |
Când stocați „lucruri” (obiecte), cum ar fi foi sau celule în variabile, adăugați „Set” la început. Dacă uitați să-l atașați, va apărea o eroare, de unde mă poticnesc adesea.
Dim ws As Worksheet
Set ws = Worksheets("numărătoarea") ' Inserați foi și celule cu Set
ws.Range("A1").Value = "Vânzări totale"
Dim target As Range
Set target = ws.Range("A2:C10")
target.ClearContentsPentru valorile care nu se modifică în timpul procesului, cum ar fi cota impozitului pe consum, dacă utilizați „Const” pentru a face o constantă, trebuie să schimbați doar un loc atunci când o schimbați.
Const TAX_RATE As Double = 0.1 ' O valoare care nu se modifică în timpul procesului
Range("C2").Value = Range("B2").Value * (1 + TAX_RATE)Cum se specifică celulele/intervalele
Cel mai obișnuit lucru de scris în VBA este specificarea celulelor. 「Range("A1")" este adresa celulei, iar "Celele (rând, coloană)" este specificată prin număr.Celulele, care pot fi specificate după număr, sunt utile atunci când deplasați rândurile unul câte unul în timpul repetării.
Range("A1").Value = 100 ' A1
Range("A1:C3").Value = 0 ' Grupate în A1-C3
Range("A:A").Font.Bold = True ' Întreaga coloană A
Range("2:2").Font.Bold = True ' întreg al doilea rând
Cells(2, 3).Value = "C2" ' Al doilea rând/a treia coloană (C2)
Range(Cells(1, 1), Cells(5, 3)).Select ' A1〜C5
Worksheets("numărătoarea").Range("A1").Value = "Total" ' Specificați foaiaDacă nu scrieți un nume de foaie, foaia care este deschisă în prezent (foaia activă) va fi vizată. Când utilizați o altă foaie, faceți clicWorksheets("numele foii").” în față.
găsi ultimul rând
Pentru tabelele în care numărul de rânduri se modifică în fiecare lună, verificați câte date există înainte de procesare. Acesta este un mod de a scrie pentru a găsi numărul de rând al primei celule care conține date, începând cu celula de jos din coloana A și lucrând în sus.
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' Căutați din partea de jos a coloanei A până în sus
Range("A2:A" & lastRow).Font.Bold = True ' De la partea de jos a titlului până la ultima linieÎntregul tabel/schimba/extinde
Range("A1").CurrentRegion.Select ' Întregul tabel este conectat la A1
Range("A1").Offset(1, 0).Value = "jos" ' 1 rând mai jos (A2)
Range("A1").Offset(0, 2).Value = "corect" ' Al doilea rând la dreapta (C1)
Range("A1").Resize(3, 2).Select ' 3 rânduri x 2 coloane din A1 (A1:B3)Manipularea valorilor, formulelor și formatelor
Valorile celulelor sunt citite și scrise folosind „.Value”. Pentru formula, introduceți același șir ca atunci când îl introduceți în Excel în „.Formula”.
Range("D2").Formula = "=B2*C2" ' introduceți formula
Range("A2:D10").ClearContents ' Ștergeți doar valoarea (formatul rămâne)
Range("A1").Font.Bold = True ' Aldin
Range("A1").Interior.Color = RGB(255, 242, 204) ' culoarea umplerii
Range("D2:D10").NumberFormat = "#,##0" ' separator din 3 cifre
Range("A1:D10").Copy Destination:=Worksheets("rezerva").Range("A1") ' copiați și lipițiRamificare condiționată (If · Select Case)
Utilizați „Dacă ~ Atunci” pentru a separa procesarea în funcție de condiții. Nu uitați „End If” de la sfârșit.Folosiți „ElseIf” pentru a împărți condiția în mai multe condiții și „Else” atunci când nu se aplică niciuna dintre condiții.
If Range("B2").Value >= 80 Then
Range("C2").Value = "A trecut"
ElseIf Range("B2").Value >= 60 Then
Range("C2").Value = "Reconfirmare"
Else
Range("C2").Value = "Eșuează"
End IfIf Range("A2").Value = "" Then
MsgBox "A2 este gol"
End If
' Și (ambele), Sau (oricare), <> (nu sunt egale)
If Range("B2").Value >= 60 And Range("C2").Value <> "Absența" Then
Range("D2").Value = "OK"
End IfCând împărțiți în mai multe moduri pe baza unei singure valori, „Selectare caz” este mai ușor de citit.
Select Case Range("B2").Value
Case "Tokyo", "Yokohama"
Range("C2").Value = "Kanto"
Case "Osaka", "Kyoto"
Range("C2").Value = "Kansai"
Case Else
Range("C2").Value = "Altele"
End SelectRepetați (For · For Each · Do While)
Efectuarea aceleiași procesări pentru fiecare rând este locul în care VBA își arată cea mai mare putere.„Pentru ~ Următorul” se repetă în timp ce se incrementează variabila i cu 1.
Dim i As Long
For i = 2 To 10
Cells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).Value
Next iCând procesați celule dintr-un interval sau foi dintr-un registru de lucru una câte una, utilizați „Pentru fiecare”.
Dim cell As Range
For Each cell In Range("A2:A10")
If cell.Value = "" Then
cell.Interior.Color = RGB(255, 199, 206) ' completați spațiile libere cu roșu
End If
Next cell
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets ' toate foile
ws.Range("A1").Font.Bold = True
Next wsDacă rândul de sfârșit nu este determinat, utilizați „Do While” pentru a repeta atâta timp cât condițiile sunt îndeplinite.Dacă uiți „r = r + 1”, nu te vei putea opri.Când nu se oprește,EscSauCtrl+BreakÎl poți întrerupe cu .
Dim r As Long
r = 2
Do While Cells(r, 1).Value <> "" ' Până când coloana A este goală
Cells(r, 5).Value = "Confirmat"
r = r + 1
LoopFor i = 2 To 100
If Cells(i, 1).Value = "Total" Then Exit For ' ieși la jumătatea drumului
Next iCum să scrieți și să utilizați funcțiile
Când vorbim despre „funcții” în VBA, există trei tipuri:
Creați-vă propria funcție (Funcție)
Dacă o creați folosind „Funcție”, va deveni o funcție care returnează valoarea calculată. Dacă puneți o valoare în numele funcției, acesta este rezultatul.Dacă îl scrieți într-un modul standard, puteți introduce „=Suma inclusiv taxele (A2)” într-o celulă și îl puteți utiliza în același mod ca o funcție de foaie de lucru.
Function PriceWithTax(price As Double) As Double
PriceWithTax = price * 1.1 ' Valoarea pe care o puneți în numele funcției devine rezultatul.
End Function
Sub UseFunction()
Range("B2").Value = PriceWithTax(Range("A2").Value)
End SubUtilizarea funcțiilor de foi de lucru cu VBA
Funcțiile utilizate în celule, cum ar fi SUM și COUNTIF, pot fi apelate cu „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")Funcții VBA
VBA oferă, de asemenea, funcții care gestionează datele și șirurile.
Range("A1").Value = Format(Date, "yyyy-mm-dd") ' data de azi în text
Range("A2").Value = Now ' data și ora curente
Range("A3").Value = Len("Komorebi Shop") ' Număr de caractere → 13
Range("A4").Value = Left("2026-10-06", 4) ' 4 caractere din stânga → 2026
Range("A5").Value = Replace("Tokyo Ramura", "Ramura", "") ' Înlocuiește → Tokyo
Range("A6").Value = Trim(" Tokyo ") ' Ștergeți spațiile înainte și dupăMesaj și introducere (MsgBox · InputBox)
Folosit pentru a notifica sfârșitul procesării sau pentru a confirma înainte de execuție. Dacă utilizați „InputBox”, puteți introduce luna, persoana responsabilă etc. de fiecare dată când rulați programul.
MsgBox "S-a terminat"
If MsgBox("Vrei să-l rulezi?", vbYesNo) = vbNo Then Exit Sub
Dim answer As String
answer = InputBox("Câte luni?")
Range("A1").Value = answer & "Lunar"Operațiuni cu foi/carte
Worksheets("Vânzări").Activate ' schimba cearșafurile
Worksheets("Vânzări").Copy After:=Worksheets(Worksheets.Count) ' foaie de copiere
ActiveSheet.Name = "Oct" ' Schimbați numele foii
Worksheets.Add After:=Worksheets(Worksheets.Count) ' adăugați foaie
Dim book As Workbook
Set book = Workbooks.Open(ThisWorkbook.Path & "\Tokyo_October.xlsx")
book.Close SaveChanges:=False ' Închideți fără salvare
ThisWorkbook.Save ' Salvați acest registru de lucruDacă sunt multe procesări de făcut, puteți opri actualizarea ecranului și se va termina mai repede. Puteți scrie procesul când apare o eroare folosind „On Error GoTo”.
Sub RunFaster()
Application.ScreenUpdating = False ' Opriți actualizările ecranului
' ...Proces care necesită timp...
Application.ScreenUpdating = True ' reveni la ultimul
End SubSub HandleErrors()
On Error GoTo ErrHandler
Worksheets("numărătoarea").Range("A1").Value = "OK"
Exit Sub
ErrHandler:
MsgBox "am primit o eroare:" & Err.Description
End SubExemplu combinat: calculul și colorarea tabelului de vânzări
Combinând codul de până acum, obținem acest lucru: în foaia „Vânzări”, într-un tabel cu numele produsului în coloana A, cantitatea în coloana B și prețul unitar în coloana C, se calculează suma în coloana D și se colorează rândurile de 100.000 de yeni sau mai mult verde.
Sub CheckSales()
Dim ws As Worksheet
Dim lastRow As Long, i As Long
Set ws = Worksheets("Vânzări")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
' Sumă = Cantitate × Preț unitar
ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
' Dacă este peste 100.000 de yeni, este verde.
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 & "a calculat rândul"
End SubConține variabile (Dim), specificația foii (Set), rândul final, repetiția (For) și ramificarea condiționată (Dacă). Dacă puteți citi „ce se face în ce celulă” rând cu rând, puteți modifica numărul de rânduri și condițiile pentru a se potrivi tabelului dvs.
Chiar și atunci când aveți codul de creare a AI, dacă puteți citi această formă, puteți verifica singur ce coloană este calculată și dacă sunt îndeplinite condițiile.
Aflați mai multe
Vă recomandăm să verificați lista de coduri pentru a vedea cum să o scrieți și apoi să o încercați folosind fișierul de material didactic. Această carte introductivă pas cu pas vă permite să exersați totul, de la înregistrarea macrocomenzi până la variabile, repetare și ramificare condiționată cu exemple conectate.
Pentru cei care se simt blocați să o facă singuri sau cei care ar dori să discute despre domenii ale muncii lor care pot fi automatizate, să urmeze un curs predat de un instructor este, de asemenea, o opțiune.
Cum să alegeți o metodă de studiu este prezentat și în Cum să studiezi macrocomenzi și VBA.