Ú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é.
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.
Procvič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át | význam |
|---|---|
| Sub MacroName() 〜 End Sub | Začátek a konec makra (postup) |
| ' Komentář | ' Poznámky, které nejsou provedeny od do konce řádku |
| Dim item As Long | Př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).Row | Poslední řádek s údaji ve sloupci A |
| .Value | hodnota buňky |
| If condition Then 〜 End If | Proveďte pouze při splnění podmínek |
| For i = 1 To 10 〜 Next i | opakujte stanovený počet opakování |
| For Each item In targetRange 〜 Next | Zpracujte buňky v rozsahu jednu po druhé |
| Function MacroName() … End Function | Domá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.
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".
Sub RunAll()
Call CheckSales ' zavolat další Makra
Call SayHello
End SubJak 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í „=“.
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 |
|---|---|
| Long | Celé číslo (číslo řádku, počet položek atd.) |
| Double | Čísla včetně desetinných míst (částky, procenta atd.) |
| String | řetězec |
| Date | Datum/čas |
| Boolean | True / False |
| Variant | Cokoli se vejde (když se nerozhodnete pro typ) |
| Worksheet / Range | List/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.
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.ClearContentsU 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.
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í.
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 listPokud 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.
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í řádekCelý stůl/směna/rozšíření
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".
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žtePodmí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 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 IfIf 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 IfPři dělení na více způsobů na základě jedné hodnoty je „Select Case“ lépe čitelné.
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 SelectOpakovat (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.
Dim i As Long
For i = 2 To 10
Cells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).Value
Next iPři zpracování buněk v oblasti nebo listů v sešitu jeden po druhém použijte "Pro každý."
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 wsPokud 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í .
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
LoopFor i = 2 To 100
If Cells(i, 1).Value = "Celkem" Then Exit For ' výjezd uprostřed
Next iJak 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 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 SubPoužití funkcí listu s VBA
Funkce používané v buňkách, jako je SUM a COUNTIF, lze volat pomocí funkce 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.
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 poZprá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 "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
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šitPokud 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".
Sub RunFaster()
Application.ScreenUpdating = False ' Zastavit aktualizace obrazovky
' ...Proces, který vyžaduje čas...
Application.ScreenUpdating = True ' vrátit se k poslednímu
End SubSub HandleErrors()
On Error GoTo ErrHandler
Worksheets("spočítat").Range("A1").Value = "OK"
Exit Sub
ErrHandler:
MsgBox "Zobrazila se mi chyba:" & Err.Description
End SubKombinovaný 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ě.
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 SubObsahuje 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.