Wprowadzenie do makr i VBA
Jak rozpocząć pracę z Excelem VBA
Lista często używanych kodów
Podsumowaliśmy przygotowania do rozpoczęcia pisania VBA i podstawowe kody, które są często używane. Przedstawimy przykłady, które możesz skopiować i wypróbować, w tym specyfikację komórki/zakresu, zmienne, rozgałęzienia warunkowe, powtarzanie i sposób pisania funkcji.
Jeśli chcesz wiedzieć, czym są makra i język VBA, zapoznaj się najpierw z sekcją Artykuł wprowadzający do makr/VBA.
Przygotowanie środowiska programistycznego (Windows)
Do napisania VBA nie potrzebujesz żadnego innego oprogramowania. Zapisz to w VBE(Visual Basic Editor) w Excelu i wykonaj tak, jak jest. Najpierw przygotuj poniższe tylko raz.
1. Pokaż zakładkę programisty
Otwórz „Plik” → „Opcje” → „Dostosowywanie Wstążki”, zaznacz „Programista” na liście „Karty główne” po prawej stronie i naciśnij „OK”. Na wstążce pojawi się zakładka „Programista”.
2. Otwórz VBE
Kliknij „Visual Basic” na karcie „Programista”.Alt+F11Ale mogę to otworzyć. Ponowne naciśnięcie spowoduje powrót do ekranu programu Excel.
3. Dodaj moduł standardowy
Z menu VBE wybierz „Wstaw” → „Moduł standardowy”. Po lewej stronie w projekcie zostanie utworzony „Moduł1”, a po prawej stronie będziesz mógł pisać kod. W tym standardowym module zapisywane są zwykłe makra.
4. Włącz opcję „Wymuś deklarację zmiennej”
Zaznacz opcję „Wymuś deklarację zmiennej” w „Narzędzia” → „Opcje” → zakładka „Edycja” VBE. Poniższa linia zostanie automatycznie wstawiona na początku nowo utworzonego modułu i zostanie wyświetlony komunikat o błędzie informujący o błędnym wpisaniu nazwy zmiennej.
Option Explicit ' Umieść na początku modułu, aby wymagać deklaracji zmiennych za pomocą Dim.5. Napisz i wykonaj
Po napisaniu kodu kliknij wewnątrz Sub ~ End Sub, a następnie naciśnij „▶” (Formularz Sub/Uruchom użytkownika) na pasku narzędzi, lubF5Naciśnij Na ekranie programu Excel kliknij „Makra” (Alt+F8), aby wybrać nazwę i ją wykonać.
Jeśli chcesz sprawdzić wartości pośrednie, przejdź do „Widok” → „Okno natychmiastowe” VBE (Ctrl+G) i wpisz w kodzie „Debug.Print nazwa zmiennej”, wartość tam się pojawi.
6. Zapisz jako skoroszyt z obsługą makr (.xlsm)
W przypadku skoroszytu, w którym napisałeś VBA, wybierz „Skoroszyt programu Excel z obsługą makr (*.xlsm)” w „Zapisz jako”. Jeśli zapiszesz go jako zwykły plik .xlsx, napisany kod zostanie utracony.
Jeśli po otwarciu skoroszytu zostanie wyświetlony komunikat „Ostrzeżenie dotyczące bezpieczeństwa: makra zostały wyłączone”, kliknij opcję „Włącz zawartość” tylko wtedy, gdy skoroszyt jest utworzony przez Ciebie lub któremu ufasz. Makra mogą być blokowane w plikach zapisywanych z poczty elektronicznej lub Internetu. W takim przypadku kliknij plik prawym przyciskiem myszy → wybierz „Właściwości” i zaznacz „Zezwalaj”.
Zmian dokonanych za pomocą makra nie można cofnąć za pomocą kombinacji klawiszy Ctrl+Z.Wypróbowując tę opcję, skorzystaj z kopii skoroszytu lub danych ćwiczeniowych.
W przypadku komputerów Mac wyświetl kartę programisty, wybierając menu „Excel” → „Preferencje” → „Wstążka i pasek narzędzi” i otwórz VBE w „Visual Basic” na karcie programisty.
Poćwicz korzystanie z przeglądarkiPrzećwicz od wyświetlenia karty programowania do uruchomienia kodu →Skrócona lista referencyjna często używanych kodów
Jeśli potrafisz przeczytać tyle, będziesz w stanie odczytać wiele zarejestrowanych makr i kodów stworzonych przez sztuczną inteligencję. Szczegółowe instrukcje dla każdego z nich przedstawiono w poniższych sekcjach.
| Jak pisać | znaczenie |
|---|---|
| Sub MacroName() 〜 End Sub | Początek i koniec makra (procedury) |
| ' Komentarz | ' Nuty, które nie są wykonywane od końca linii |
| Dim item As Long | Przygotuj zmienną (Long jest liczbą całkowitą) |
| Set item = Worksheets("zgadzać się") | Umieść arkusze, komórki itp. w zmiennych |
| Range("A1") | Komórka A1 |
| Range("A1:C5") | Zakres od A1 do C5 |
| Cells(row, column) | Określ komórki według numeru wiersza/kolumny |
| Cells(Rows.Count, 1).End(xlUp).Row | Ostatni wiersz z danymi w kolumnie A |
| .Value | wartość komórki |
| If condition Then 〜 End If | Wykonaj tylko wtedy, gdy spełnione są warunki |
| For i = 1 To 10 〜 Next i | powtórz określoną liczbę razy |
| For Each item In targetRange 〜 Next | Przetwarzaj komórki w zakresie jeden po drugim |
| Function MacroName() … End Function | Domowa funkcja zwracająca wartość |
| WorksheetFunction.Sum(targetRange) | Korzystanie z funkcji arkusza w języku VBA |
| MsgBox "postacie" | pokaż wiadomość |
Podstawowa forma makra (Sub) i komentarzy
Makra zaczyna się od „Nazwa submakra ()” i kończy się na „End Sub”. Polecenia zapisane w tym czasie zostaną wykonane w kolejności od góry. Język japoński może być również używany w nazwach makr.
Sub SayHello()
' Ta linia jest komentowana (nie wykonywana)
MsgBox "Witam"
End Sub「'” (pojedynczy cudzysłów) na końcu wiersza jest komentarzem. Zapisanie tego, co robisz, pomoże ci przeczytać to później lub przekazać komuś innemu.
Użyj „Zadzwoń”, aby wywołać inne makra.
Sub RunAll()
Call CheckSales ' wywołaj inne Makra
Call SayHello
End SubJak pisać zmienne i stałe
Zmienne to pola przechowujące wartości, które są obliczane lub wartości, które są używane wielokrotnie. Przygotuj go za pomocą „Nazwa zmiennej przyciemnienia Jako typ” i wprowadź wartość za pomocą „=".
Sub VariablesExample()
Dim total As Long ' liczba całkowita
Dim customer As String ' ciąg
Dim price As Double ' liczby z miejscami dziesiętnymi
Dim today As Date ' Data
Dim finished As Boolean ' Prawda czy fałsz
total = 12
customer = "Komorebi Shop"
price = 1200.5
today = Date
finished = False
Range("A1").Value = customer & ":" & total & "sprawa"
End Sub| pleśń | Co włożyć |
|---|---|
| Long | Liczba całkowita (numer wiersza, liczba elementów itp.) |
| Double | Liczby łącznie z ułamkami dziesiętnymi (kwoty, procenty itp.) |
| String | ciąg |
| Date | Data/godzina |
| Boolean | True / False |
| Variant | Wszystko może pasować (jeśli nie decydujesz o typie) |
| Worksheet / Range | Arkusz/komórka (wstaw z zestawem) |
Podczas przechowywania „rzeczy” (obiektów), takich jak arkusze lub komórki w zmiennych, dodaj „Ustaw” na początku. Jeśli zapomnisz go dołączyć, pojawi się błąd, o który często się potykam.
Dim ws As Worksheet
Set ws = Worksheets("zgadzać się") ' Wstaw arkusze i komórki za pomocą Set
ws.Range("A1").Value = "Całkowita sprzedaż"
Dim target As Range
Set target = ws.Range("A2:C10")
target.ClearContentsW przypadku wartości, które nie zmieniają się w trakcie procesu, takich jak stawka podatku konsumpcyjnego, jeśli użyjesz opcji „Const”, aby ustawić ją na stałą, wystarczy zmienić tylko jedno miejsce podczas jej zmiany.
Const TAX_RATE As Double = 0.1 ' Wartość, która nie zmienia się w trakcie procesu
Range("C2").Value = Range("B2").Value * (1 + TAX_RATE)Jak określić komórki/zakresy
Najczęstszą rzeczą do pisania w VBA jest określanie komórek. 「Range("A1")„ to adres komórki, a „Komórki (wiersz, kolumna)” jest określone liczbą.Komórki, które można określić za pomocą liczb, są przydatne podczas przesuwania wierszy jeden po drugim podczas powtarzania.
Range("A1").Value = 100 ' A1
Range("A1:C3").Value = 0 ' Pogrupowane w A1-C3
Range("A:A").Font.Bold = True ' Cała kolumna A
Range("2:2").Font.Bold = True ' cały drugi rząd
Cells(2, 3).Value = "C2" ' 2. rząd/3. kolumna (C2)
Range(Cells(1, 1), Cells(5, 3)).Select ' A1〜C5
Worksheets("zgadzać się").Range("A1").Value = "Razem" ' Określ arkuszJeśli nie wpiszesz nazwy arkusza, celem będzie aktualnie otwarty arkusz (arkusz aktywny). Podczas obsługi innego arkusza kliknijWorksheets("nazwa arkusza").” z przodu.
znajdź ostatni rząd
W przypadku tabel, w których liczba wierszy zmienia się co miesiąc, przed przetworzeniem sprawdź, ile jest danych. Jest to sposób pisania mający na celu znalezienie numeru wiersza pierwszej komórki zawierającej dane, zaczynając od dolnej komórki w kolumnie A i kierując się w górę.
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' Szukaj od dołu kolumny A do góry
Range("A2:A" & lastRow).Font.Bold = True ' Od dołu nagłówka do ostatniej linijkiCała tabela/przesuń/rozwiń
Range("A1").CurrentRegion.Select ' Cały stół podłączony do A1
Range("A1").Offset(1, 0).Value = "dół" ' 1 linia poniżej (A2)
Range("A1").Offset(0, 2).Value = "prawda" ' 2. rząd po prawej (C1)
Range("A1").Resize(3, 2).Select ' 3 rzędy x 2 kolumny z A1 (A1:B3)Manipulowanie wartościami, formułami i formatami
Wartości komórek są odczytywane i zapisywane przy użyciu „.Value”. W przypadku formuły wprowadź ten sam ciąg znaków, jaki przy wprowadzaniu go w programie Excel w polu „.Formula”.
Range("D2").Formula = "=B2*C2" ' wprowadź formułę
Range("A2:D10").ClearContents ' Usuń tylko wartość (format pozostaje)
Range("A1").Font.Bold = True ' Pogrubienie
Range("A1").Interior.Color = RGB(255, 242, 204) ' kolor wypełnienia
Range("D2:D10").NumberFormat = "#,##0" ' 3-cyfrowy separator
Range("A1:D10").Copy Destination:=Worksheets("rezerwa").Range("A1") ' kopiuj i wklejRozgałęzianie warunkowe (If · Select Case)
Użyj „If ~ Then”, aby oddzielić przetwarzanie na podstawie warunków. Nie zapomnij o „End If” na końcu.Użyj „ElseIf”, aby podzielić warunek na wiele warunków, lub „Else”, jeśli żaden z warunków nie ma zastosowania.
If Range("B2").Value >= 80 Then
Range("C2").Value = "Minęło"
ElseIf Range("B2").Value >= 60 Then
Range("C2").Value = "Potwierdzenie"
Else
Range("C2").Value = "Niepowodzenie"
End IfIf Range("A2").Value = "" Then
MsgBox "A2 jest puste"
End If
' I (oba), Lub (albo), <> (nie równe)
If Range("B2").Value >= 60 And Range("C2").Value <> "Nieobecność" Then
Range("D2").Value = "OK"
End IfW przypadku dzielenia na wiele sposobów w oparciu o jedną wartość opcja „Wybierz wielkość liter” jest łatwiejsza do odczytania.
Select Case Range("B2").Value
Case "Tokio", "Jokohama"
Range("C2").Value = "Kanto"
Case "Osaka", "Kioto"
Range("C2").Value = "Kansai"
Case Else
Range("C2").Value = "Inne"
End SelectPowtórz (For · For Each · Do While)
Wykonanie tego samego przetwarzania dla każdego wiersza jest momentem, w którym VBA pokazuje swoją największą moc.„For ~ Next” powtarza się podczas zwiększania zmiennej 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 iPodczas przetwarzania komórek w zakresie lub arkuszy skoroszytu jedna po drugiej, użyj opcji „Dla każdego”.
Dim cell As Range
For Each cell In Range("A2:A10")
If cell.Value = "" Then
cell.Interior.Color = RGB(255, 199, 206) ' uzupełnij puste miejsca kolorem czerwonym
End If
Next cell
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets ' wszystkie prześcieradła
ws.Range("A1").Font.Bold = True
Next wsJeśli wiersz końcowy nie jest określony, użyj opcji „Do While”, aby powtarzać, o ile spełnione są warunki.Jeśli zapomnisz „r = r + 1”, nie będziesz mógł przestać.Kiedy to się nie kończy,EscLubCtrl+BreakMożesz to przerwać za pomocą .
Dim r As Long
r = 2
Do While Cells(r, 1).Value <> "" ' Dopóki kolumna A nie będzie pusta
Cells(r, 5).Value = "Potwierdzone"
r = r + 1
LoopFor i = 2 To 100
If Cells(i, 1).Value = "Razem" Then Exit For ' wyjdź w połowie
Next iJak pisać i używać funkcji
Kiedy mówimy o „funkcjach” w VBA, istnieją trzy typy:
Stwórz własną funkcję (Funkcja)
Jeśli utworzysz go za pomocą „Funkcji”, stanie się funkcją zwracającą obliczoną wartość. Jeśli umieścisz wartość w nazwie funkcji, taki będzie wynik.Jeśli napiszesz to w standardowym module, możesz wpisać w komórce „=Kwota łącznie z podatkiem (A2)” i używać jej w taki sam sposób, jak funkcji arkusza.
Function PriceWithTax(price As Double) As Double
PriceWithTax = price * 1.1 ' Wartość, którą umieścisz w nazwie funkcji, stanie się wynikiem.
End Function
Sub UseFunction()
Range("B2").Value = PriceWithTax(Range("A2").Value)
End SubKorzystanie z funkcji arkusza w języku VBA
Funkcje używane w komórkach, takie jak SUM i COUNTIF, można wywołać za pomocą funkcji „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")Funkcje VBA
VBA udostępnia także funkcje obsługujące daty i ciągi znaków.
Range("A1").Value = Format(Date, "yyyy-mm-dd") ' dzisiejsza data w tekście
Range("A2").Value = Now ' aktualna data i godzina
Range("A3").Value = Len("Komorebi Shop") ' Liczba znaków → 13
Range("A4").Value = Left("2026-10-06", 4) ' 4 znaki od lewej → 2026
Range("A5").Value = Replace("Tokio Oddział", "Oddział", "") ' Zamień → Tokio
Range("A6").Value = Trim(" Tokio ") ' Usuń spacje przed i poWiadomość i dane wejściowe (MsgBox · InputBox)
Służy do powiadamiania o zakończeniu przetwarzania lub do potwierdzenia przed wykonaniem. Jeśli używasz „InputBox”, możesz wprowadzić miesiąc, osobę odpowiedzialną itp. przy każdym uruchomieniu programu.
MsgBox "To koniec"
If MsgBox("Czy chcesz to uruchomić?", vbYesNo) = vbNo Then Exit Sub
Dim answer As String
answer = InputBox("Ile miesięcy?")
Range("A1").Value = answer & "Miesięcznie"Operacje na arkuszach/książkach
Worksheets("Sprzedaż").Activate ' przełączać arkusze
Worksheets("Sprzedaż").Copy After:=Worksheets(Worksheets.Count) ' arkusz kopii
ActiveSheet.Name = "Paź" ' Zmień nazwę arkusza
Worksheets.Add After:=Worksheets(Worksheets.Count) ' dodaj arkusz
Dim book As Workbook
Set book = Workbooks.Open(ThisWorkbook.Path & "\Tokio_October.xlsx")
book.Close SaveChanges:=False ' Zamknij bez zapisywania
ThisWorkbook.Save ' Zapisz ten skoroszytJeśli jest dużo do zrobienia, możesz zatrzymać aktualizację ekranu, a aktualizacja zakończy się szybciej. Możesz napisać proces, gdy wystąpi błąd, używając „On Error GoTo”.
Sub RunFaster()
Application.ScreenUpdating = False ' Zatrzymaj aktualizacje ekranu
' ...Proces, który wymaga czasu...
Application.ScreenUpdating = True ' powrót do ostatniego
End SubSub HandleErrors()
On Error GoTo ErrHandler
Worksheets("zgadzać się").Range("A1").Value = "OK"
Exit Sub
ErrHandler:
MsgBox "Wystąpił błąd:" & Err.Description
End SubPołączony przykład: Obliczanie i kolorowanie tabeli sprzedaży
Łącząc dotychczasowy kod, otrzymujemy coś takiego: w arkuszu „Sprzedaż”, w tabeli z nazwą produktu w kolumnie A, ilością w kolumnie B i ceną jednostkową w kolumnie C, oblicz kwotę w kolumnie D i pokoloruj wiersze o wartości 100 000 jenów lub więcej na zielono.
Sub CheckSales()
Dim ws As Worksheet
Dim lastRow As Long, i As Long
Set ws = Worksheets("Sprzedaż")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
' Kwota = ilość × cena jednostkowa
ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
' Jeśli przekracza 100 000 jenów, jest zielony.
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 & "obliczył rząd"
End SubZawiera zmienne (Dim), specyfikację arkusza (Set), ostatni wiersz, powtórzenie (For) i rozgałęzienie warunkowe (If). Jeśli potrafisz odczytać wiersz po wierszu „co jest wykonywane w której komórce”, możesz zmienić liczbę wierszy i warunki, aby dopasować je do swojej tabeli.
Nawet jeśli masz kod do tworzenia kodu przez sztuczną inteligencję, jeśli potrafisz odczytać ten kształt, możesz sam sprawdzić, która kolumna jest obliczana i czy warunki są spełnione.
Dowiedz się więcej
Zalecamy sprawdzenie listy kodów, aby dowiedzieć się, jak ją zapisać, a następnie wypróbowanie jej przy użyciu pliku materiałów dydaktycznych. Ta książka wprowadzająca krok po kroku pozwala przećwiczyć wszystko, od rejestrowania makr po zmienne, powtarzanie i rozgałęzianie warunkowe z połączonymi przykładami.
Dla tych, którzy czują, że utknęli w samotności lub którzy chcieliby omówić obszary swojej pracy, które można zautomatyzować, opcją jest również wzięcie udziału w kursie prowadzonym przez instruktora.
Sposób wyboru metody badania jest również przedstawiony w Jak uczyć się makr i VBA.