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.

górna część modułu
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.

MacrowPoć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 SubPoczątek i koniec makra (procedury)
' Komentarz' Nuty, które nie są wykonywane od końca linii
Dim item As LongPrzygotuj 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).RowOstatni wiersz z danymi w kolumnie A
.Valuewartość komórki
If condition Then 〜 End IfWykonaj tylko wtedy, gdy spełnione są warunki
For i = 1 To 10 〜 Next ipowtórz określoną liczbę razy
For Each item In targetRange 〜 NextPrzetwarzaj komórki w zakresie jeden po drugim
Function MacroName() … End FunctionDomowa 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.

Podstawowa forma Makra
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.

wywołaj Makra
Sub RunAll()
    Call CheckSales     ' wywołaj inne Makra
    Call SayHello
End Sub

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

Przygotuj i użyj zmiennych
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ć
LongLiczba całkowita (numer wiersza, liczba elementów itp.)
DoubleLiczby łącznie z ułamkami dziesiętnymi (kwoty, procenty itp.)
Stringciąg
DateData/godzina
BooleanTrue / False
VariantWszystko może pasować (jeśli nie decydujesz o typie)
Worksheet / RangeArkusz/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.

Umieść komórki arkusza w zmiennych
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.ClearContents

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

stała
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.

Określanie komórek/zakresów
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 arkusz

Jeś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ę.

ostatnia linijka
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 linijki

Cała tabela/przesuń/rozwiń

Bieżący region・Przesunięcie・Zmień rozmiar
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”.

Wartość/wzór/format
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 wklej

Rozgałę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 〜 ElseIf 〜 Else
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 If
Pusty osąd/wiele warunków
If 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 If

W przypadku dzielenia na wiele sposobów w oparciu o jedną wartość opcja „Wybierz wielkość liter” jest łatwiejsza do odczytania.

Select Case
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 Select

Powtó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.

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

Podczas przetwarzania komórek w zakresie lub arkuszy skoroszytu jedna po drugiej, użyj opcji „Dla każdego”.

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

Jeś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ą .

Do While 〜 Loop
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
Loop
Wyjdź dla
For i = 2 To 100
    If Cells(i, 1).Value = "Razem" Then Exit For   ' wyjdź w połowie
Next i

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

Korzystanie 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”.

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.

Format・Długość・Lewy・Zamień itp.
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 po

Wiadomość 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 · InputBox
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

książeczka z arkuszami
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 skoroszyt

Jeś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”.

Zatrzymaj aktualizacje ekranu
Sub RunFaster()
    Application.ScreenUpdating = False   ' Zatrzymaj aktualizacje ekranu
    ' ...Proces, który wymaga czasu...
    Application.ScreenUpdating = True    ' powrót do ostatniego
End Sub
Bądź przygotowany na błędy
Sub HandleErrors()
    On Error GoTo ErrHandler
    Worksheets("zgadzać się").Range("A1").Value = "OK"
    Exit Sub
ErrHandler:
    MsgBox "Wystąpił błąd:" & Err.Description
End Sub

Połą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.

Kontrola sprzedaży
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 Sub

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