Úvod do maker a VBA

Jak začít s Excelem VBA
Seznam často používaných kódů

Shrnuli jsme přípravy na zahájení psaní VBA a základní kódy, které se často používají. Představíme příklady, které si můžete zkopírovat a vyzkoušet, včetně specifikace buňky/rozsahu, proměnných, podmíněného větvení, opakování a psaní funkcí.

Pokud chcete vědět, co jsou makra a VBA, přečtěte si nejprve Úvodní článek o maker/VBA.

Příprava vývojového prostředí (Windows)

K psaní VBA nepotřebujete žádný další software. Napište to v VBE(Visual Basic Editor) v Excelu a spusťte tak, jak je. Nejprve si následující připravte pouze jednou.

1. Zobrazte kartu vývojáře

Otevřete „Soubor“ → „Možnosti“ → „Přizpůsobit pás karet“, v seznamu „Hlavní karty“ vpravo zaškrtněte „Vývojář“ a stiskněte „OK“. Na pásu karet se zobrazí karta „Vývojář“.

2. Otevřete VBE

Klikněte na "Visual Basic" na kartě "Developer".Alt+F11Ale můžu to otevřít. Dalším stisknutím se vrátíte na obrazovku Excelu.

3. Přidejte standardní modul

Vyberte "Vložit" → "Standardní modul" z nabídky VBE. Vlevo se v projektu vytvoří "Module1" a vpravo budete moci psát kód. V tomto standardním modulu se zapisují běžná makra.

4. Zapněte "Vynutit deklaraci proměnné"

Zaškrtněte políčko "Vynutit deklaraci proměnné" v záložce "Nástroje" → "Možnosti" → "Upravit" VBE. Následující řádek se automaticky vloží na začátek nově vytvořeného modulu a zobrazí se chybové hlášení, které vás upozorní, že jste zadali špatně název proměnné.

horní část modulu
Option Explicit   ' Na začátku modulu vyžaduje deklaraci proměnných pomocí Dim.

5. Napište a spusťte

Po napsání kódu klikněte dovnitř Sub ~ End Sub a poté stiskněte "▶" (Sub/Run User Form) na panelu nástrojů, neboF5Stiskněte Na obrazovce Excel klikněte na "Makra" (Alt+F8) vyberte název a spusťte jej.

Pokud chcete zkontrolovat mezilehlé hodnoty, přejděte na VBE "Zobrazit" → "Okamžité okno" (Ctrl+G) a do kódu napište "Název proměnné Debug.Print", tam se objeví hodnota.

6. Uložit jako sešit s podporou maker (.xlsm)

Pro sešit, ve kterém jste napsali VBA, vyberte v "Uložit jako" "Sešit Excel s podporou maker (*.xlsm)". Pokud jej uložíte jako běžný soubor .xlsx, kód, který jste napsali, bude ztracen.

Když se při otevření sešitu zobrazí zpráva „Upozornění zabezpečení: Makra byla zakázána“, klikněte na „Povolit obsah“ pouze v případě, že sešit je vytvořený nebo kterému důvěřujete. Makra mohou být blokována v souborech uložených z e-mailu nebo internetu. V takovém případě klikněte pravým tlačítkem na soubor → vyberte „Vlastnosti“ a zaškrtněte „Povolit“.

Změny provedené pomocí makra nelze vrátit zpět pomocí Ctrl+Z.Při vyzkoušení použijte kopii sešitu nebo cvičná data.

Na Macu zobrazte kartu vývojáře výběrem nabídky „Excel“ → „Předvolby“ → „Ribbon and Toolbar“ a otevřete VBE ve „Visual Basic“ na kartě vývojáře.

MacrowProcvičte si používání prohlížečeProcvičte si od zobrazení vývojové karty po spuštění kódu →

Rychlý referenční seznam často používaných kódů

Pokud dokážete přečíst tolik, budete schopni přečíst mnoho zaznamenaných maker a kódů vytvořených umělou inteligencí. Podrobné pokyny pro každou z nich jsou uvedeny v následujících částech.

Jak psátvýznam
Sub MacroName() 〜 End SubZačátek a konec makra (postup)
' Komentář' Poznámky, které nejsou provedeny od do konce řádku
Dim item As LongPřipravte proměnnou (Long je celé číslo)
Set item = Worksheets("spočítat")Vložte listy, buňky atd. do proměnných
Range("A1")Buňka A1
Range("A1:C5")Rozsah od A1 do C5
Cells(row, column)Určete buňky číslem řádku/sloupce
Cells(Rows.Count, 1).End(xlUp).RowPoslední řádek s údaji ve sloupci A
.Valuehodnota buňky
If condition Then 〜 End IfProveďte pouze při splnění podmínek
For i = 1 To 10 〜 Next iopakujte stanovený počet opakování
For Each item In targetRange 〜 NextZpracujte buňky v rozsahu jednu po druhé
Function MacroName() … End FunctionDomácí funkce, která vrací hodnotu
WorksheetFunction.Sum(targetRange)Použití funkcí listu s VBA
MsgBox "postavy"zobrazit zprávu

Základní forma makra (Sub) a komentáře

Makra začíná "Sub macro name()" a končí "End Sub". Příkazy zapsané během této doby budou provedeny v pořadí shora. Japonština může být také použita v názvech maker.

Základní forma makra
Sub SayHello()
    ' Tento řádek je okomentován (neproveden)
    MsgBox "Dobrý den"
End Sub

「'” (jednoduchá citace) na konci řádku je komentář. Když si zapíšete, co děláte, pomůže vám to přečíst si to později nebo to předat někomu jinému.

Pro volání dalších maker použijte "Volat".

volání makra
Sub RunAll()
    Call CheckSales     ' zavolat další Makra
    Call SayHello
End Sub

Jak psát proměnné a konstanty

Proměnné jsou boxy, které ukládají hodnoty, které se počítají, nebo hodnoty, které se používají mnohokrát. Připravte jej pomocí "Ztlumit název proměnné jako typ" a zadejte hodnotu pomocí „=“.

Připravte a použijte proměnné
Sub VariablesExample()
    Dim total As Long        ' celé číslo
    Dim customer As String   ' řetězec
    Dim price As Double      ' čísla s desetinnými místy
    Dim today As Date        ' Datum
    Dim finished As Boolean  ' Pravda nebo nepravda

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

    Range("A1").Value = customer & ":" & total & "záležitost"
End Sub
plíseňCo vložit
LongCelé číslo (číslo řádku, počet položek atd.)
DoubleČísla včetně desetinných míst (částky, procenta atd.)
Stringřetězec
DateDatum/čas
BooleanTrue / False
VariantCokoli se vejde (když se nerozhodnete pro typ)
Worksheet / RangeList/buňka (vložit pomocí sady)

Při ukládání „věcí“ (objektů), jako jsou listy nebo buňky do proměnných, přidejte "Nastavit" na začátku. Pokud jej zapomenete přiložit, dojde k chybě, kde často narážím.

Vložte buňky listu do proměnných
Dim ws As Worksheet
Set ws = Worksheets("spočítat")    ' Vložte listy a buňky pomocí Set
ws.Range("A1").Value = "Celkové tržby"

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

U hodnot, které se během procesu nemění, jako je sazba spotřební daně, pokud použijete "Const" k tomu, aby byla konstanta, stačí při změně změnit pouze jedno místo.

konstantní
Const TAX_RATE As Double = 0.1   ' Hodnota, která se během procesu nemění

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

Jak určit buňky/rozsahy

Nejběžnější věcí, kterou se ve VBA píše, je určení buněk. 「Range("A1")" je adresa buňky a "Buňky (řádek, sloupec)" je určeno číslem.Buňky, které lze zadat číslem, jsou užitečné při posouvání řádků jeden po druhém během opakování.

Určení buněk/rozsahů
Range("A1").Value = 100                     ' A1
Range("A1:C3").Value = 0                    ' Seskupeny do A1-C3
Range("A:A").Font.Bold = True               ' Celý sloupec A
Range("2:2").Font.Bold = True               ' celá druhá řada
Cells(2, 3).Value = "C2"                     ' 2. řádek/3. sloupec (C2)
Range(Cells(1, 1), Cells(5, 3)).Select      ' A1〜C5
Worksheets("spočítat").Range("A1").Value = "Celkem" ' Určete list

Pokud nenapíšete název listu, bude zaměřen list, který je aktuálně otevřený (aktivní list). Při práci s jiným listem klikněteWorksheets("název listu").“ vepředu.

najít poslední řádek

U tabulek, kde se počet řádků mění každý měsíc, zkontrolujte před zpracováním množství dat. Toto je způsob zápisu k nalezení čísla řádku první buňky, která obsahuje data, počínaje spodní buňkou ve sloupci A a směrem nahoru.

poslední řádek
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row   ' Hledejte od spodní části sloupce A nahoru

Range("A2:A" & lastRow).Font.Bold = True     ' Od spodní části nadpisu po poslední řádek

Celý stůl/směna/rozšíření

Aktuální oblast・Posun・Změnit velikost
Range("A1").CurrentRegion.Select       ' Celý stůl připojen k A1
Range("A1").Offset(1, 0).Value = "dno"    ' 1 řádek níže (A2)
Range("A1").Offset(0, 2).Value = "správně"    ' 2. řada vpravo (C1)
Range("A1").Resize(3, 2).Select         ' 3 řádky x 2 sloupce z A1 (A1:B3)

Manipulace s hodnotami, vzorci a formáty

Hodnoty buněk se čtou a zapisují pomocí ".Value". Pro vzorec zadejte stejný řetězec jako při zadávání v Excelu do ".Formula".

Hodnota/Vzorec/Formát
Range("D2").Formula = "=B2*C2"                  ' zadejte vzorec
Range("A2:D10").ClearContents                   ' Smazat pouze hodnotu (formát zůstane)
Range("A1").Font.Bold = True                    ' Tučné
Range("A1").Interior.Color = RGB(255, 242, 204) ' barva výplně
Range("D2:D10").NumberFormat = "#,##0"          ' 3-místný oddělovač
Range("A1:D10").Copy Destination:=Worksheets("rezerva").Range("A1")  ' zkopírujte a vložte

Podmíněné větvení (If · Select Case)

Použijte „If ~ Then“ k oddělení zpracování na základě podmínek. Nezapomeňte na "End If" na konci.Použijte „ElseIf“ k rozdělení podmínky do více podmínek a „Else“, pokud neplatí žádná z podmínek.

If 〜 ElseIf 〜 Else
If Range("B2").Value >= 80 Then
    Range("C2").Value = "Prošel"
ElseIf Range("B2").Value >= 60 Then
    Range("C2").Value = "Opětovné potvrzení"
Else
    Range("C2").Value = "Selhat"
End If
Prázdný rozsudek/více podmínek
If Range("A2").Value = "" Then
    MsgBox "A2 je prázdné"
End If

' A (obojí), Nebo (buď), <> (není stejné)
If Range("B2").Value >= 60 And Range("C2").Value <> "Absence" Then
    Range("D2").Value = "OK"
End If

Při dělení na více způsobů na základě jedné hodnoty je „Select Case“ lépe čitelné.

Select Case
Select Case Range("B2").Value
    Case "Tokio", "Jokohama"
        Range("C2").Value = "Kanto"
    Case "Ósaka", "Kyoto"
        Range("C2").Value = "Kansai"
    Case Else
        Range("C2").Value = "Jiné"
End Select

Opakovat (For · For Each · Do While)

Provádění stejného zpracování pro každý řádek je místo, kde VBA vykazuje největší výkon.„For ~ Next“ se opakuje při zvyšování proměnné i o 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

Při zpracování buněk v oblasti nebo listů v sešitu jeden po druhém použijte "Pro každý."

For Each
Dim cell As Range
For Each cell In Range("A2:A10")
    If cell.Value = "" Then
        cell.Interior.Color = RGB(255, 199, 206)   ' doplňte prázdná místa červenou barvou
    End If
Next cell

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets   ' všechny listy
    ws.Range("A1").Font.Bold = True
Next ws

Pokud není určen koncový řádek, opakujte pomocí „Do While“, dokud jsou splněny podmínky.Pokud zapomenete "r = r + 1", nebudete moci zastavit.Když to nepřestane,EscNeboCtrl+BreakMůžete to přerušit pomocí .

Do While 〜 Loop
Dim r As Long
r = 2
Do While Cells(r, 1).Value <> ""   ' Dokud sloupec A není prázdný
    Cells(r, 5).Value = "Potvrzeno"
    r = r + 1
Loop
Konec pro
For i = 2 To 100
    If Cells(i, 1).Value = "Celkem" Then Exit For   ' výjezd uprostřed
Next i

Jak psát a používat funkce

Když mluvíme o „funkcích“ ve VBA, existují tři typy:

Vytvořte si vlastní funkci (Function)

Pokud ji vytvoříte pomocí "Funkce", stane se funkcí, která vrací vypočítanou hodnotu. Pokud do názvu funkce vložíte hodnotu, je to výsledek.Pokud jej napíšete do standardního modulu, můžete do buňky zadat „=Částka včetně daně (A2)“ a použít jej stejným způsobem jako funkci listu.

Function
Function PriceWithTax(price As Double) As Double
    PriceWithTax = price * 1.1     ' Hodnota, kterou zadáte do názvu funkce, se stane výsledkem.
End Function

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

Použití funkcí listu s VBA

Funkce používané v buňkách, jako je SUM a COUNTIF, lze volat pomocí funkce 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"), "Tokio")

Funkce VBA

VBA také poskytuje funkce, které zpracovávají data a řetězce.

Formát・Len・Levá・Nahradit atd.
Range("A1").Value = Format(Date, "yyyy-mm-dd")   ' dnešní datum v textu
Range("A2").Value = Now                           ' aktuální datum a čas
Range("A3").Value = Len("Komorebi Shop")             ' Počet znaků → 13
Range("A4").Value = Left("2026-10-06", 4)         ' 4 znaky zleva → 2026
Range("A5").Value = Replace("Tokio Pobočka", "Pobočka", "") ' Nahradit → Tokio
Range("A6").Value = Trim("  Tokio  ")               ' Vymažte mezery před a po

Zpráva a vstup (MsgBox · InputBox)

Používá se k upozornění na konec zpracování nebo k potvrzení před provedením. Pokud používáte "InputBox", můžete zadat měsíc, odpovědnou osobu atd. při každém spuštění programu.

MsgBox · InputBox
MsgBox "je konec"

If MsgBox("Chcete to spustit?", vbYesNo) = vbNo Then Exit Sub

Dim answer As String
answer = InputBox("Kolik měsíců?")
Range("A1").Value = answer & "Měsíční"

Operace s listy/knihami

listová kniha
Worksheets("Prodej").Activate                    ' přepínací listy
Worksheets("Prodej").Copy After:=Worksheets(Worksheets.Count)  ' kopírovací list
ActiveSheet.Name = "Říj"                        ' Změnit název listu
Worksheets.Add After:=Worksheets(Worksheets.Count)          ' přidat list

Dim book As Workbook
Set book = Workbooks.Open(ThisWorkbook.Path & "\Tokio_October.xlsx")
book.Close SaveChanges:=False                    ' Zavřít bez uložení
ThisWorkbook.Save                                ' Uložte tento sešit

Pokud je třeba provést mnoho zpracování, můžete aktualizaci obrazovky zastavit a dokončí se rychleji. Proces můžete napsat, když dojde k chybě, pomocí "On Error GoTo".

Zastavit aktualizace obrazovky
Sub RunFaster()
    Application.ScreenUpdating = False   ' Zastavit aktualizace obrazovky
    ' ...Proces, který vyžaduje čas...
    Application.ScreenUpdating = True    ' vrátit se k poslednímu
End Sub
Buďte připraveni na chyby
Sub HandleErrors()
    On Error GoTo ErrHandler
    Worksheets("spočítat").Range("A1").Value = "OK"
    Exit Sub
ErrHandler:
    MsgBox "Zobrazila se mi chyba:" & Err.Description
End Sub

Kombinovaný příklad: Výpočet prodejní tabulky a barvení

Kombinací dosavadního kódu dostaneme toto: V listu "Prodej" v tabulce s názvem produktu ve sloupci A, množstvím ve sloupci B a jednotkovou cenou ve sloupci C vypočítejte částku ve sloupci D a vybarvěte řádky 100 000 jenů nebo více zeleně.

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

    For i = 2 To lastRow
        ' Částka = množství × jednotková cena
        ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
        ' Pokud je to více než 100 000 jenů, je to zelené.
        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 & "vypočítal řádek"
End Sub

Obsahuje proměnné (Dim), specifikaci listu (Set), poslední řádek, opakování (For) a podmíněné větvení (If). Pokud můžete číst „co se dělá v které buňce“ řádek po řádku, můžete změnit počet řádků a podmínky tak, aby vyhovovaly vaší tabulce.

I když máte vytvořený kód AI, můžete si tento tvar přečíst, můžete sami zkontrolovat, který sloupec se počítá a zda jsou splněny podmínky.

Zjistěte více

Doporučujeme nahlédnout do číselníku, jak jej zapsat a následně vyzkoušet pomocí souboru výukových materiálů. Tato úvodní kniha krok za krokem vám umožní procvičit si vše od záznamu maker po proměnné, opakování a podmíněné větvení s připojenými příklady.

Pro ty, kteří mají pocit, že to dělají sami, nebo pro ty, kteří by rádi diskutovali o oblastech své práce, které lze automatizovat, je také možnost absolvovat kurz pod vedením instruktora.

Jak vybrat metodu studia je také představeno v Jak studovat makra a VBA.