Einführung in Makros und VBA

Erste Schritte mit Excel VBA
Liste häufig verwendeter Codes

Wir haben die Vorbereitungen zum Schreiben von VBA und die häufig verwendeten Grundcodes zusammengefasst. Wir stellen Beispiele vor, die Sie kopieren und ausprobieren können, darunter Zell-/Bereichsspezifikation, Variablen, bedingte Verzweigung, Wiederholung und das Schreiben von Funktionen.

Wenn Sie wissen möchten, was Makros und VBA sind, lesen Sie bitte zuerst Einführungsartikel zu Makros/VBA.

Vorbereiten der Entwicklungsumgebung (Windows)

Sie benötigen keine andere Software, um VBA zu schreiben. Schreiben Sie es in VBE(Visual Basic Editor) in Excel und führen Sie es so aus, wie es ist. Bereiten Sie Folgendes zunächst nur einmal vor.

1. Zeigen Sie die Registerkarte „Entwickler“ an

Öffnen Sie „Datei“ → „Optionen“ → „Menüband anpassen“, aktivieren Sie „Entwickler“ in der Liste der „Hauptregisterkarten“ auf der rechten Seite und klicken Sie auf „OK“. Im Menüband wird die Registerkarte „Entwickler“ angezeigt.

2. Öffnen Sie VBE

Klicken Sie auf der Registerkarte „Entwickler“ auf „Visual Basic“.Alt+F11Aber ich kann es öffnen. Durch erneutes Drücken kehren Sie zum Excel-Bildschirm zurück.

3. Standardmodul hinzufügen

Wählen Sie im VBE-Menü „Einfügen“ → „Standardmodul“. „Modul1“ wird im Projekt auf der linken Seite erstellt und Sie können auf der rechten Seite Code schreiben. In diesem Standardmodul werden gewöhnliche Makros geschrieben.

4. Aktivieren Sie „Variablendeklaration erzwingen“

Aktivieren Sie „Variablendeklaration erzwingen“ in VBEs Registerkarte „Extras“ → „Optionen“ → „Bearbeiten“. Die folgende Zeile wird automatisch am Anfang des neu erstellten Moduls eingefügt und eine Fehlermeldung wird angezeigt, um Sie darüber zu informieren, wenn Sie einen Variablennamen falsch eingegeben haben.

Oberseite des Moduls
Option Explicit   ' Am Modulanfang verlangt diese Anweisung die Deklaration von Variablen mit Dim.

5. Schreiben und ausführen

Nachdem Sie den Code geschrieben haben, klicken Sie auf „Sub ~ End Sub“ und drücken Sie dann „▶“ (Sub/Run User Form) in der Symbolleiste, oderF5Klicken Sie auf dem Excel-Bildschirm auf „Makros“ (Alt+F8), um einen Namen auszuwählen und auszuführen.

Wenn Sie Zwischenwerte überprüfen möchten, gehen Sie zu VBEs „Ansicht“ → „Sofortfenster“ (Ctrl+G) und schreiben Sie „Debug.Print Variablenname“ in den Code, der Wert wird dort erscheinen.

6. Als makrofähige Arbeitsmappe speichern (.xlsm)

Wählen Sie für die Arbeitsmappe, in der Sie VBA geschrieben haben, unter „Speichern unter“ die Option „Excel-Makros-fähige Arbeitsmappe (*.xlsm)“ aus. Wenn Sie es als normale XLSX-Datei speichern, geht der von Ihnen geschriebene Code verloren.

Wenn Sie beim Öffnen der Arbeitsmappe die Meldung „Sicherheitswarnung: Makros wurden deaktiviert“ erhalten, klicken Sie nur dann auf „Inhalt aktivieren“, wenn es sich bei der Arbeitsmappe um eine von Ihnen erstellte oder vertrauenswürdige Arbeitsmappe handelt. Makros können in Dateien blockiert werden, die per E-Mail oder aus dem Internet gespeichert wurden. Klicken Sie in diesem Fall mit der rechten Maustaste auf die Datei → wählen Sie „Eigenschaften“ und aktivieren Sie „Zulassen“.

Mit einem Makros vorgenommene Änderungen können nicht mit Strg+Z rückgängig gemacht werden.Verwenden Sie beim Ausprobieren eine Kopie der Arbeitsmappe oder Übungsdaten.

Zeigen Sie für Mac die Registerkarte „Entwickler“ an, indem Sie „Excel“-Menü → „Einstellungen“ → „Menüband und Symbolleiste“ auswählen und VBE in „Visual Basic“ auf der Registerkarte „Entwickler“ öffnen.

MacrowÜben Sie den Umgang mit dem BrowserÜben Sie vom Anzeigen der Registerkarte „Entwicklertools“ bis zum Ausführen von Code →

Eine kurze Referenzliste häufig verwendeter Codes

Wenn Sie so viel lesen können, können Sie auch viele der aufgezeichneten Makros und Codes lesen, die von der KI erstellt wurden. Detaillierte Anweisungen zu den einzelnen Schritten finden Sie in den folgenden Abschnitten.

Wie schreibe ichBedeutung
Sub MacroName() 〜 End SubDer Anfang und das Ende eines Makros (einer Prozedur)
' Kommentar' Hinweise, die nicht bis zum Ende der Zeile ausgeführt werden
Dim item As LongBereiten Sie eine Variable vor (Long ist eine ganze Zahl)
Set item = Worksheets("Bilanz")Fügen Sie Blätter, Zellen usw. in Variablen ein
Range("A1")Zelle A1
Range("A1:C5")Bereich von A1 bis C5
Cells(row, column)Geben Sie Zellen nach Zeilen-/Spaltennummer an
Cells(Rows.Count, 1).End(xlUp).RowDie letzte Zeile mit Daten in Spalte A
.ValueZellwert
If condition Then 〜 End IfNur ausführen, wenn die Bedingungen erfüllt sind
For i = 1 To 10 〜 Next ieine festgelegte Anzahl von Malen wiederholen
For Each item In targetRange 〜 NextVerarbeiten Sie die Zellen im Bereich nacheinander
Function MacroName() … End FunctionSelbstgemachte Funktion, die einen Wert zurückgibt
WorksheetFunction.Sum(targetRange)Arbeitsblattfunktionen mit VBA verwenden
MsgBox "Charaktere"Nachricht anzeigen

Grundform von Makros (Sub) und Kommentaren

Das Makros beginnt mit „Sub-Makroname()“ und endet mit „End Sub“. Die während dieser Zeit geschriebenen Befehle werden in der Reihenfolge von oben ausgeführt. Japanisch kann auch in Makronamen verwendet werden.

Grundform eines Makros
Sub SayHello()
    ' Diese Zeile ist kommentiert (nicht ausgeführt)
    MsgBox "Hallo"
End Sub

「'„(Einfaches Anführungszeichen) am Ende der Zeile ist ein Kommentar. Wenn Sie aufschreiben, was Sie tun, können Sie es später besser lesen oder an jemand anderen weitergeben.

Mit „Aufrufen“ rufen Sie weitere Makros auf.

Makros aufrufen
Sub RunAll()
    Call CheckSales     ' Rufen Sie ein anderes Makros auf
    Call SayHello
End Sub

So schreiben Sie Variablen und Konstanten

Variablen sind Felder, in denen berechnete oder häufig verwendete Werte gespeichert werden. Bereiten Sie es mit „Variablennamen als Typ dimmen“ vor und geben Sie den Wert mit „=" ein.

Variablen vorbereiten und verwenden
Sub VariablesExample()
    Dim total As Long        ' ganze Zahl
    Dim customer As String   ' Zeichenfolge
    Dim price As Double      ' Zahlen mit Dezimalstellen
    Dim today As Date        ' Datum
    Dim finished As Boolean  ' Richtig oder falsch

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

    Range("A1").Value = customer & ":" & total & "Angelegenheit"
End Sub
SchimmelWas einzugeben ist
LongGanzzahl (Zeilennummer, Anzahl der Elemente usw.)
DoubleZahlen einschließlich Dezimalzahlen (Beträge, Prozentsätze usw.)
StringZeichenfolge
DateDatum/Uhrzeit
BooleanTrue / False
VariantAlles kann passen (wenn Sie sich nicht für einen Typ entscheiden)
Worksheet / RangeBlatt/Zelle (mit Set einfügen)

Wenn Sie „Dinge“ (Objekte) wie Tabellen oder Zellen in Variablen speichern, fügen Sie „Setzen“ am Anfang hinzu. Wenn Sie vergessen, es anzuhängen, tritt ein Fehler auf, über den ich oft stolpere.

Fügen Sie Blattzellen in Variablen ein
Dim ws As Worksheet
Set ws = Worksheets("Bilanz")    ' Fügen Sie Blätter und Zellen mit Set ein
ws.Range("A1").Value = "Gesamtumsatz"

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

Bei Werten, die sich während des Prozesses nicht ändern, wie z. B. dem Verbrauchssteuersatz, müssen Sie bei der Änderung nur eine Stelle ändern, wenn Sie „Const“ verwenden, um ihn zu einer Konstanten zu machen.

konstant
Const TAX_RATE As Double = 0.1   ' Ein Wert, der sich während des Prozesses nicht ändert

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

So geben Sie Zellen/Bereiche an

Die häufigste Schreibaufgabe in VBA ist die Angabe von Zellen. 「Range("A1")„ ist die Zellenadresse und „Zellen (Zeile, Spalte)“ wird durch die Nummer angegeben.Zellen, die anhand ihrer Nummer angegeben werden können, sind hilfreich, wenn Zeilen während der Wiederholung einzeln verschoben werden sollen.

Angeben von Zellen/Bereichen
Range("A1").Value = 100                     ' A1
Range("A1:C3").Value = 0                    ' Gruppiert in A1-C3
Range("A:A").Font.Bold = True               ' Ganze Spalte A
Range("2:2").Font.Bold = True               ' gesamte zweite Reihe
Cells(2, 3).Value = "C2"                     ' 2. Reihe/3. Spalte (C2)
Range(Cells(1, 1), Cells(5, 3)).Select      ' A1〜C5
Worksheets("Bilanz").Range("A1").Value = "Insgesamt" ' Blatt angeben

Wenn Sie keinen Blattnamen eingeben, wird das aktuell geöffnete Blatt (aktives Blatt) als Ziel ausgewählt. Wenn Sie ein anderes Blatt bedienen, klicken Sie aufWorksheets("Blattname").” vorne.

Finde die letzte Zeile

Überprüfen Sie bei Tabellen, bei denen sich die Anzahl der Zeilen jeden Monat ändert, vor der Verarbeitung, wie viele Daten vorhanden sind. Dies ist eine Schreibweise, um die Zeilennummer der ersten Zelle zu finden, die Daten enthält, beginnend bei der untersten Zelle in Spalte A und nach oben arbeitend.

letzte Zeile
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row   ' Suchen Sie vom Ende der Spalte A nach oben

Range("A2:A" & lastRow).Font.Bold = True     ' Vom Ende der Überschrift bis zur letzten Zeile

Gesamte Tabelle/Schicht/Erweitern

Aktuelle Region・Offset・Größe ändern
Range("A1").CurrentRegion.Select       ' Gesamte Tabelle mit A1 verbunden
Range("A1").Offset(1, 0).Value = "unten"    ' 1 Zeile darunter (A2)
Range("A1").Offset(0, 2).Value = "richtig"    ' 2. Reihe rechts (C1)
Range("A1").Resize(3, 2).Select         ' 3 Zeilen x 2 Spalten von A1 (A1:B3)

Bearbeiten von Werten, Formeln und Formaten

Zellwerte werden mit „.Value“ gelesen und geschrieben. Geben Sie für die Formel in „.Formula“ die gleiche Zeichenfolge ein wie bei der Eingabe in Excel.

Wert/Formel/Format
Range("D2").Formula = "=B2*C2"                  ' Geben Sie die Formel ein
Range("A2:D10").ClearContents                   ' Nur den Wert löschen (das Format bleibt erhalten)
Range("A1").Font.Bold = True                    ' Fett
Range("A1").Interior.Color = RGB(255, 242, 204) ' Füllfarbe
Range("D2:D10").NumberFormat = "#,##0"          ' 3-stelliges Trennzeichen
Range("A1:D10").Copy Destination:=Worksheets("reservieren").Range("A1")  ' kopieren und einfügen

Bedingte Verzweigung (If · Select Case)

Verwenden Sie „Wenn ~ Dann“, um die Verarbeitung nach Bedingungen zu trennen. Vergessen Sie nicht das „End If“ am Ende.Verwenden Sie „ElseIf“, um die Bedingung in mehrere Bedingungen zu unterteilen, und „Else“, wenn keine der Bedingungen zutrifft.

If 〜 ElseIf 〜 Else
If Range("B2").Value >= 80 Then
    Range("C2").Value = "Bestanden"
ElseIf Range("B2").Value >= 60 Then
    Range("C2").Value = "Rückbestätigung"
Else
    Range("C2").Value = "Scheitern"
End If
Leeres Urteil/mehrere Bedingungen
If Range("A2").Value = "" Then
    MsgBox "A2 ist leer"
End If

' Und (beide), Oder (entweder), <> (ungleich)
If Range("B2").Value >= 60 And Range("C2").Value <> "Abwesenheit" Then
    Range("D2").Value = "OK"
End If

Bei der Aufteilung auf mehrere Arten basierend auf einem Wert ist „Select Case“ einfacher zu lesen.

Select Case
Select Case Range("B2").Value
    Case "Tokio", "Yokohama"
        Range("C2").Value = "Kanto"
    Case "Osaka", "Kyoto"
        Range("C2").Value = "Kansai"
    Case Else
        Range("C2").Value = "Andere"
End Select

Wiederholen (For · For Each · Do While)

Wenn für jede Zeile die gleiche Verarbeitung durchgeführt wird, zeigt VBA seine größte Leistung.„For ~ Next“ wird wiederholt, während die Variable i um 1 erhöht wird.

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

Wenn Sie Zellen in einem Bereich oder Blätter in einer Arbeitsmappe einzeln verarbeiten, verwenden Sie „Für jeden“.

For Each
Dim cell As Range
For Each cell In Range("A2:A10")
    If cell.Value = "" Then
        cell.Interior.Color = RGB(255, 199, 206)   ' Füllen Sie die Lücken mit Rot aus
    End If
Next cell

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets   ' alle Blätter
    ws.Range("A1").Font.Bold = True
Next ws

Wenn die Endzeile nicht bestimmt ist, wiederholen Sie den Vorgang mit „Do While“, solange die Bedingungen erfüllt sind.Wenn Sie „r = r + 1“ vergessen, können Sie nicht aufhören.Wenn es nicht aufhört,EscOderCtrl+BreakSie können es mit unterbrechen.

Do While 〜 Loop
Dim r As Long
r = 2
Do While Cells(r, 1).Value <> ""   ' Bis Spalte A leer ist
    Cells(r, 5).Value = "Bestätigt"
    r = r + 1
Loop
Ausgang für
For i = 2 To 100
    If Cells(i, 1).Value = "Insgesamt" Then Exit For   ' Verlassen Sie es auf halbem Weg
Next i

Wie man Funktionen schreibt und verwendet

Wenn wir in VBA über „Funktionen“ sprechen, gibt es drei Arten:

Erstellen Sie Ihre eigene Funktion (Funktion)

Wenn Sie es mit „Funktion“ erstellen, wird es zu einer Funktion, die den berechneten Wert zurückgibt. Wenn Sie einen Wert in den Funktionsnamen eingeben, ist dies das Ergebnis.Wenn Sie es in einem Standardmodul schreiben, können Sie „=Betrag inklusive Steuer (A2)“ in eine Zelle eingeben und es auf die gleiche Weise wie eine Arbeitsblattfunktion verwenden.

Function
Function PriceWithTax(price As Double) As Double
    PriceWithTax = price * 1.1     ' Der Wert, den Sie in den Funktionsnamen eingeben, wird zum Ergebnis.
End Function

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

Arbeitsblattfunktionen mit VBA verwenden

In Zellen verwendete Funktionen wie SUM und COUNTIF können mit „WorksheetFunction“ aufgerufen werden.

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")

VBA-Funktionen

VBA bietet auch Funktionen zur Verarbeitung von Datumsangaben und Zeichenfolgen.

Format・Länge・Links・Ersetzen usw.
Range("A1").Value = Format(Date, "yyyy-mm-dd")   ' das heutige Datum im Text
Range("A2").Value = Now                           ' aktuelles Datum und Uhrzeit
Range("A3").Value = Len("Komorebi Shop")             ' Anzahl der Zeichen → 13
Range("A4").Value = Left("2026-10-06", 4)         ' 4 Zeichen von links → 2026
Range("A5").Value = Replace("Tokio Zweig", "Zweig", "") ' Ersetzen → Tokio
Range("A6").Value = Trim("  Tokio  ")               ' Löschen Sie die Leerzeichen davor und danach

Nachricht und Eingabe (MsgBox · InputBox)

Wird verwendet, um das Ende der Verarbeitung anzuzeigen oder vor der Ausführen zu bestätigen. Wenn Sie „InputBox“ verwenden, können Sie bei jedem Start des Programms den Monat, die verantwortliche Person usw. eingeben.

MsgBox · InputBox
MsgBox "Es ist vorbei"

If MsgBox("Möchten Sie es ausführen?", vbYesNo) = vbNo Then Exit Sub

Dim answer As String
answer = InputBox("Wie viele Monate?")
Range("A1").Value = answer & "Monatlich"

Blatt-/Buchoperationen

Blattbuch
Worksheets("Verkäufe").Activate                    ' Wechselblätter
Worksheets("Verkäufe").Copy After:=Worksheets(Worksheets.Count)  ' Kopierblatt
ActiveSheet.Name = "Okt"                        ' Blattnamen ändern
Worksheets.Add After:=Worksheets(Worksheets.Count)          ' Blatt hinzufügen

Dim book As Workbook
Set book = Workbooks.Open(ThisWorkbook.Path & "\Tokio_October.xlsx")
book.Close SaveChanges:=False                    ' Schließen ohne zu speichern
ThisWorkbook.Save                                ' Speichern Sie diese Arbeitsmappe

Wenn viel Verarbeitungsaufwand anfällt, können Sie die Aktualisierung des Bildschirms stoppen und die Aktualisierung wird schneller abgeschlossen. Mit „On Error GoTo“ können Sie den Ablauf bei Auftreten eines Fehlers schreiben.

Stoppen Sie Bildschirmaktualisierungen
Sub RunFaster()
    Application.ScreenUpdating = False   ' Stoppen Sie Bildschirmaktualisierungen
    ' ...Prozess, der Zeit braucht...
    Application.ScreenUpdating = True    ' zurück zum letzten
End Sub
Seien Sie auf Fehler vorbereitet
Sub HandleErrors()
    On Error GoTo ErrHandler
    Worksheets("Bilanz").Range("A1").Value = "OK"
    Exit Sub
ErrHandler:
    MsgBox "Ich habe eine Fehlermeldung erhalten:" & Err.Description
End Sub

Kombiniertes Beispiel: Berechnung und Einfärbung der Verkaufstabelle

Wenn wir den bisherigen Code kombinieren, erhalten wir Folgendes: Berechnen Sie im Arbeitsblatt „Verkäufe“ in einer Tabelle mit dem Produktnamen in Spalte A, der Menge in Spalte B und dem Stückpreis in Spalte C den Betrag in Spalte D und färben Sie die Zeilen mit 100.000 Yen oder mehr grün.

Verkaufscheck
Sub CheckSales()
    Dim ws As Worksheet
    Dim lastRow As Long, i As Long
    Set ws = Worksheets("Verkäufe")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        ' Menge = Menge × Stückpreis
        ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
        ' Wenn es über 100.000 Yen ist, ist es grün.
        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 & "die Zeile berechnet"
End Sub

Enthält Variablen (Dim), Blattspezifikation (Set), letzte Zeile, Wiederholung (For) und bedingte Verzweigung (If). Wenn Sie Zeile für Zeile lesen können, „was in welcher Zelle gemacht wird“, können Sie die Anzahl der Zeilen und Bedingungen entsprechend Ihrer Tabelle ändern.

Selbst wenn Sie KI-Code erstellen lassen und diese Form lesen können, können Sie selbst überprüfen, welche Spalte berechnet wird und ob die Bedingungen erfüllt sind.

Erfahren Sie mehr

Wir empfehlen, anhand der Codeliste zu prüfen, wie man den Code schreibt, und ihn dann anhand der Lehrmaterialdatei auszuprobieren. Mit diesem Schritt-für-Schritt-Einführungsbuch können Sie alles von der Aufzeichnung von Makros bis hin zu Variablen, Wiederholungen und bedingten Verzweigungen anhand verbundener Beispiele üben.

Für diejenigen, die das Gefühl haben, alleine nicht weiterkommen zu können, oder diejenigen, die Bereiche ihrer Arbeit besprechen möchten, die sich automatisieren lassen, ist auch die Teilnahme an einem von einem Dozenten geleiteten Kurs eine Option.

Wie man eine Lernmethode auswählt, wird ebenfalls in Wie lernt man Makros und VBA? erläutert.