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ă.

partea de sus a modulului
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.

MacrowExersaț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 scriesensul
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 LongPregă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).RowUltimul rând cu date din coloana A
.Valuevaloarea celulei
If condition Then 〜 End IfSe execută numai când sunt îndeplinite condițiile
For i = 1 To 10 〜 Next irepetați un anumit număr de ori
For Each item In targetRange 〜 NextProcesați celulele în interval una câte una
Function MacroName() … End FunctionFuncț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.

Forma de bază de 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.

apel Macrocomenzi
Sub RunAll()
    Call CheckSales     ' apelați o altă macrocomandă
    Call SayHello
End Sub

Cum 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 „=".

Pregătiți și utilizați variabile
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
mucegaiCe să pui
LongNumăr întreg (numărul rândului, numărul de elemente etc.)
DoubleNumere, inclusiv zecimale (sume, procente etc.)
Stringsfoară
DateData/ora
BooleanTrue / False
VariantSe poate potrivi orice (când nu te hotărăști asupra unui tip)
Worksheet / RangeFoaie/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.

Puneți celulele foii în variabile
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.ClearContents

Pentru 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.

constantă
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.

Specificarea celulelor/intervalelor
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 foaia

Dacă 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.

ultima linie
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

CurrentRegion・Offset・Redimensionare
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”.

Valoare/Formulă/Format
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ți

Ramificare 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 〜 ElseIf 〜 Else
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 If
Judecata goală/condiții multiple
If 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 If

Când împărțiți în mai multe moduri pe baza unei singure valori, „Selectare caz” este mai ușor de citit.

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

Repetaț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.

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

Când procesați celule dintr-un interval sau foi dintr-un registru de lucru una câte una, utilizați „Pentru fiecare”.

For Each
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 ws

Dacă 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 .

Do While 〜 Loop
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
Loop
Ieșire pentru
For i = 2 To 100
    If Cells(i, 1).Value = "Total" Then Exit For   ' ieși la jumătatea drumului
Next i

Cum 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
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 Sub

Utilizarea funcțiilor de foi de lucru cu VBA

Funcțiile utilizate în celule, cum ar fi SUM și COUNTIF, pot fi apelate cu „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")

Funcții VBA

VBA oferă, de asemenea, funcții care gestionează datele și șirurile.

Format・Len・Left・Replace etc.
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 · InputBox
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

carte de foi
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 lucru

Dacă 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”.

Opriți actualizările ecranului
Sub RunFaster()
    Application.ScreenUpdating = False   ' Opriți actualizările ecranului
    ' ...Proces care necesită timp...
    Application.ScreenUpdating = True    ' reveni la ultimul
End Sub
Fiți pregătiți pentru erori
Sub HandleErrors()
    On Error GoTo ErrHandler
    Worksheets("numărătoarea").Range("A1").Value = "OK"
    Exit Sub
ErrHandler:
    MsgBox "am primit o eroare:" & Err.Description
End Sub

Exemplu 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.

Verificarea vânzărilor
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 Sub

Conț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.