If Then Else-Anweisung in Excel VBA (erklärt mit Beispielen)

In Excel VBA können Sie mit der IF Then Else-Anweisung nach einer Bedingung suchen und eine entsprechende Aktion ausführen.

Dies ist in vielen Situationen äußerst wertvoll, wie wir in den Beispielen später in diesem Tutorial sehen werden.

Um Ihnen ein einfaches Beispiel zu geben, nehmen Sie an, Sie haben eine Notenliste in Excel und möchten alle Schüler hervorheben, die ein A erhalten haben. Wenn ich Sie jetzt bitte, dies manuell zu tun, überprüfen Sie die Note jedes Schülers und ob sie ein A, markieren Sie es, und wenn nicht, dann lassen Sie es so wie es ist.

Die gleiche Logik kann in VBA mit dem Wenn dann sonst (und natürlich viel mehr als nur Noten hervorzuheben).

In diesem Tutorial zeige ich Ihnen verschiedene Möglichkeiten, wie das Konstrukt „If Then Else“ in Excel VBA verwendet werden kann, und einige praktische Beispiele in Aktion.

Aber bevor ich auf die Einzelheiten eingehe, möchte ich Ihnen die Syntax der 'IF Then Else'-Anweisung erläutern.

Wenn Sie daran interessiert sind, VBA auf einfache Weise zu lernen, besuchen Sie mein Online Excel VBA-Schulung.

Syntax - IF Then Else

Unten ist die generische Syntax des If Then Else-Konstrukts in VBA

IF-Bedingung Then true_code [sonst false_code]

Oder

IF-Bedingung Dann true_code Sonst false_code Ende IF

Beachten Sie, dass der Else-Teil dieser Anweisung optional ist.

Wenn Sie sich jetzt fragen, was der Unterschied zwischen den beiden Syntaxen ist, lassen Sie mich das klären.

Die erste Syntax ist eine einfache einzeilige IF THEN ELSE-Anweisung, bei der Sie die END IF-Anweisung nicht verwenden müssen.

In der zweiten Syntax befindet sich der true_code-Teil jedoch in der zweiten Zeile. Dies ist hilfreich, wenn der Code, den Sie ausführen müssen, falls die IF-Bedingung wahr ist, lang ist und aus mehreren Zeilen besteht.

Wenn Sie die IF-Anweisung in mehrere Zeilen aufteilen, müssen Sie VBA mitteilen, wo das IF Then-Konstrukt endet.

Daher müssen Sie die End IF-Anweisung verwenden.

Falls Sie End IF bei Bedarf nicht verwenden, zeigt VBA Ihnen einen Fehler - "Block IF ohne END IF"

Beispiele für die Verwendung der IF Then-Anweisung in VBA

Um Ihnen eine Vorstellung davon zu geben, wie die IF-THEN-Anweisung in VBA funktioniert, lassen Sie mich mit einigen grundlegenden Beispielen beginnen (einige praktische und nützliche Beispiele werden später in diesem Tutorial behandelt).

Angenommen, Sie haben die Punktzahl eines Schülers in Zelle A1 und Sie möchten überprüfen, ob der Schüler die Prüfung bestanden hat oder nicht (die Mindestpunktzahl liegt bei 35).

Dann können Sie folgenden Code verwenden:

Sub CheckScore() If Range("A1").Value >=35 Then MsgBox "Pass" End Sub

Der obige Code enthält eine einzelne Zeile der IF-Anweisung, die den Wert in Zelle A1 überprüft.

Wenn es mehr als 35 sind, wird die Meldung "Pass" angezeigt.

Wenn es weniger als 35 ist, passiert nichts.

Aber was ist, wenn Sie in beiden Fällen eine Nachricht anzeigen möchten, ob ein Schüler die Prüfung bestanden oder nicht bestanden hat.

Der folgende Code würde dies tun:

Sub CheckScore() If Range("A1").Value >= 35 Then MsgBox "Pass" Else MsgBox "Fail" End If End Sub

Der obige Code verwendet sowohl die IF- als auch die ELSE-Anweisung, um zwei verschiedene Bedingungen auszuführen. Wenn die Punktzahl größer (oder gleich) 35 ist, ist die IF-Bedingung wahr und der Code direkt darunter wird ausgeführt (alles vor der Else-Anweisung).

Wenn die IF-Bedingung jedoch FALSE ist, springt der Code zum Else-Teil und führt den darin enthaltenen Codeblock aus.

Beachten Sie, dass wir End IF nicht verwenden müssen, wenn wir eine einzelne Zeile der IF Then-Anweisung verwenden. Aber wenn wir es in mehr als eine Zeile aufteilen, müssen wir die End If-Anweisung verwenden.

Verschachteltes IF Then (Mehrere IF Then-Anweisungen)

Bisher haben wir eine einzige IF Then-Anweisung verwendet.

Falls Sie mehrere Bedingungen zu überprüfen haben, können Sie Folgendes verwenden:

  • Mehrere IF-Bedingungen
  • If Then Else-Anweisung
  • IF Then ElseIf Else-Konstrukt

Lassen Sie mich Ihnen zeigen, wie sich diese unterscheiden und wie Sie dies in Excel VBA verwenden.

Mehrere IF Then-Anweisungen

Nehmen wir das gleiche Beispiel für die Verwendung der Punktzahl eines Schülers.

Wenn der Schüler weniger als 35 Punkte erzielt, lautet die anzuzeigende Meldung „Nicht bestanden“, ist die Punktzahl größer oder gleich 35, ist die anzuzeigende Meldung „Bestanden“.

Wir können den folgenden Code verwenden, um dies zu erledigen:

Sub CheckScore() If Range("A1").Value = 35 Then MsgBox "Pass" End Sub

Sie können mehrere IF Then-Anweisungen verwenden, wie oben gezeigt. Dies funktioniert zwar, ist aber kein Beispiel für eine gute Codierung (wie Sie die Alternativen unten sehen werden).

Falls Sie sich dafür entscheiden, dies zu verwenden, denken Sie daran, dass diese Anweisungen entweder unabhängig sein sollten oder sich gegenseitig ausschließen. Wichtig zu wissen ist hier, dass im obigen Konstrukt alle IF-Anweisungen ausgewertet werden und bei denen die Bedingung wahr ist, der Code ausgeführt wird.

Selbst wenn die erste IF-Anweisung korrekt ist, wird die zweite immer noch ausgewertet.

WENN-dann-sonst-Anweisung

Nehmen wir an, dass wir diesmal, anstatt nur die Meldung Pass/Fail anzuzeigen, eine weitere Bedingung haben.

Wenn der Schüler weniger als 35 Punkte erzielt, ist die anzuzeigende Meldung 'Nicht bestanden', wenn die Punktzahl mehr als oder gleich 35 ist, ist die anzuzeigende Meldung 'Bestanden', und wenn die Punktzahl mehr als 80 beträgt, wird die Meldung angezeigt ist 'Pass, mit Auszeichnung'.

Wir können den folgenden Code verwenden, um dies zu erledigen:

Sub CheckScore() If Range("A1").Value < 35 Then MsgBox "Fail" Else If Range("A1").Value < 80 Then MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End If End Sub

Im obigen Code haben wir mit Hilfe von Else mehrere IF-Anweisungen (nested IF Then) verwendet.

Es gibt also ein „IF Then Else“-Konstrukt innerhalb eines „IF Then Else“-Konstrukts. Mit dieser Art der Verschachtelung können Sie nach mehreren Bedingungen suchen und den entsprechenden Codeblock ausführen.

IF Then ElseIf Else-Anweisung

Der obige Code (den wir im vorherigen Abschnitt gesehen haben) kann mit der ElseIf-Anweisung weiter optimiert werden.

Hier ist, was wir versuchen: Wenn der Schüler weniger als 35 Punkte erreicht, ist die anzuzeigende Meldung 'Nicht bestanden', wenn die Punktzahl mehr als oder gleich 35 ist, ist die anzuzeigende Meldung 'Bestanden', und wenn die Wenn die Punktzahl mehr als 80 beträgt, lautet die angezeigte Meldung 'Pass, with Distinction'.

Sub CheckScore() If Range("A1").Value < 35 Then MsgBox "Fail" ElseIf Range("A1").Value < 80 Then MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End Sub

Der obige Code verwendet ElseIf, was es uns ermöglicht, alle Bedingungen in einer einzigen IF Then-Anweisung zu speichern.

Verwenden von UND und ODER in IF Then Else

Bisher haben wir in diesem Tutorial jeweils nur eine einzelne Bedingung geprüft.

Wenn Sie jedoch über mehrere abhängige Bedingungen verfügen, können Sie die AND- oder OR-Anweisung mit den IF-Bedingungen verwenden.

Unten ist die Syntax für die Verwendung der AND/OR-Bedingung mit der IF Then-Anweisung.

IF Bedingung1 UND Bedingung2 Then true_code Sonst false_code Ende IF

Im obigen Code wird der true_code nur ausgeführt, wenn sowohl Bedingung1 als auch Bedingung2 erfüllt sind. Auch wenn eine der Bedingungen false ist, wird false_code ausgeführt.

Mit OR wird der true_code ausgeführt, selbst wenn eine der Bedingungen wahr ist. Nur wenn alle Bedingungen falsch sind, führt es den false_code aus.

Sehen wir uns nun an, wie die AND- und OR-Anweisungen mit dem IF Then Else-Konstrukt funktionieren.

Angenommen, Sie haben die Punktzahlen für zwei Fächer anstelle von einem und möchten die folgenden Bedingungen überprüfen:

  • Scheitern - Wenn die Punktzahl in einem der Fächer weniger als 35 beträgt.
  • Passieren - Wenn die Punktzahl in beiden Fächern mindestens 35, aber weniger als 80 beträgt.
  • Mit Auszeichnung bestanden - Wenn die Punktzahl in beiden Fächern mehr als 35 beträgt und in einem oder beiden Fächern mehr als oder gleich 80 ist.

Hier ist der Code, der dies tut:

Sub CheckScore() If Range("A1").Value < 35 Or Range("B1").Value < 35 Then MsgBox "Fail" ElseIf Range("A1").Value < 80 And Range("B1"). Wert < 80 Then MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End Sub

Der obige Code verwendet sowohl OR- als auch AND-Anweisungen.

Sie können denselben Code auch mit einer geringfügigen Änderung schreiben (mit ODER anstelle von UND).

Sub CheckScore() If Range("A1").Value < 35 Or Range("B1").Value 80 Or Range("B1").Value > 80 Then MsgBox "Pass, with Distinction" Else MsgBox "Pass" End Wenn Ende Sub

Beide oben genannten VBA-Codes liefern Ihnen das gleiche Ergebnis. Persönlich bevorzuge ich die erste, da sie einen logischen Ablauf der Überprüfung der Ergebnisse hat (aber das bin nur ich).

Verwenden von Ungleich in Wenn Dann

In allen obigen Beispielen haben wir die Bedingungen verwendet, die prüfen, ob ein Wert einem angegebenen Wert entspricht oder nicht.

Sie können auch ähnliche Codes verwenden, wenn Sie überprüfen, ob der Wert nicht einem angegebenen Wert im VBA-Code entspricht. Nicht gleich dargestellt durch die Excel VBA.

Um ein praktisches Beispiel für die Verwendung zu sehen, sehen Sie sich Beispiel 1 unten an.

Verwenden von If Then Else mit Schleifen in VBA

Bisher haben wir einige Beispiele durchgesehen, die gut sind, um zu verstehen, wie die 'WENN-DANN'-Anweisungen in VBA funktionieren, jedoch in der Praxis nicht nützlich sind.

Wenn ich Schüler benoten muss, kann ich das ganz einfach mit Excel-Funktionen tun.

Schauen wir uns also einige nützliche und praktische Beispiele an, die Ihnen helfen können, einige Dinge zu automatisieren und effizienter zu sein.

Beispiel 1 – Speichern und schließen Sie alle Arbeitsmappen außer der aktiven Arbeitsmappe

Wenn Sie viele Arbeitsmappen geöffnet haben und alle außer der aktiven Arbeitsmappe schnell schließen möchten, können Sie den folgenden Code verwenden:

Sub SaveCloseAllWorkbooks() Dim wb As Workbook For Every wb In Workbooks Bei Fehler fortsetzen weiter Wenn wb.Name ActiveWorkbook.Name Then wb.Save wb.Close End If Next wb End Sub

Der obige Code würde alle Arbeitsmappen (außer der aktiven) speichern und schließen.

Es verwendet die For Next-Schleife, um die Auflistung aller geöffneten Arbeitsmappen zu durchlaufen und den Namen mithilfe der IF-Bedingung zu überprüfen.

Wenn der Name nicht mit dem der aktiven Arbeitsmappe übereinstimmt, wird sie gespeichert und geschlossen.

Falls sich in einer der Arbeitsmappen ein VBA-Code befindet und Sie ihn nicht als .xls oder .xlsm gespeichert haben, wird eine Warnung angezeigt (da die VBA-Codes verloren gehen, wenn Sie sie im .xlsx-Format speichern).

Beispiel 2 – Zellen mit negativen Werten hervorheben

Angenommen, Sie haben eine Spalte voller Zahlen und möchten alle Zellen mit negativen Werten schnell rot markieren, können Sie dies mit dem folgenden Code tun.

Sub HighlightNegativeCells() Dim Cll As Range für jede Cll in der Auswahl Wenn Cll.Value < 0 Then Cll.Interior.Color = vbRed Cll.Font.Color = vbWhite End If Next Cll End Sub

Der obige Code verwendet die For Each-Schleife und überprüft jede Zelle in der von Ihnen getroffenen Auswahl. Wenn die Zelle einen negativen Wert hat, wird sie rot mit weißer Schriftfarbe hervorgehoben.

Beispiel 3 - Alle Arbeitsblätter außer dem aktuellen Arbeitsblatt ausblenden

Falls Sie schnell alle Arbeitsblätter außer dem aktiven ausblenden möchten, können Sie den folgenden Code verwenden:

Sub HideAllExceptActiveSheet() Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets If ws.Name ActiveSheet.Name Then ws.Visible = xlSheetHidden Next ws End Sub

Der obige Code verwendet die For Each-Schleife, um eine Auflistung von Arbeitsblättern zu durchlaufen. Es überprüft den Namen jedes Arbeitsblatts und blendet es aus, wenn es sich nicht um das aktive Arbeitsblatt handelt.

Beispiel 4 – Extrahieren des numerischen Teils aus einer alphanumerischen Zeichenfolge

Wenn Sie alphanumerische Zeichenfolgen in Zellen haben und den numerischen Teil daraus extrahieren möchten, können Sie dies mit dem folgenden Code tun:

Funktion GetNumeric(CellRef As String) Dim StringLength As Integer StringLength = Len(CellRef) For i = 1 To StringLength If IsNumeric(Mid(CellRef, i, 1)) Then Result = Result & Mid(CellRef, i, 1) Next i GetNumeric = Ergebnis-Endfunktion

Dieser Code erstellt eine benutzerdefinierte Funktion in Excel, die innerhalb des Arbeitsblatts verwendet werden kann (genau wie eine normale Funktion).

Wo soll der VBA-Code abgelegt werden?

Sie fragen sich, wo der VBA-Code in Ihrer Excel-Arbeitsmappe hingehört?

Excel hat ein VBA-Backend namens VB-Editor. Sie müssen den Code kopieren und in das Codefenster des VB-Editor-Moduls einfügen.

Hier sind die Schritte, um dies zu tun:

  1. Wechseln Sie zur Registerkarte Entwickler.
  2. Klicken Sie auf die Visual Basic-Option. Dies öffnet den VB-Editor im Backend.
  3. Klicken Sie im Bereich Projekt-Explorer im VB-Editor mit der rechten Maustaste auf ein beliebiges Objekt für die Arbeitsmappe, in die Sie den Code einfügen möchten. Wenn Sie den Projekt-Explorer nicht sehen, gehen Sie zur Registerkarte Ansicht und klicken Sie auf Projekt-Explorer.
  4. Gehen Sie zu Einfügen und klicken Sie auf Modul. Dadurch wird ein Modulobjekt für Ihre Arbeitsmappe eingefügt.
  5. Kopieren Sie den Code und fügen Sie ihn in das Modulfenster ein.

Sie werden die Entwicklung der Website helfen, die Seite mit Ihren Freunden teilen

wave wave wave wave wave