So realisierst du Verzweigungen in VBA (Teil 1)

Um es ganz genau zu nehmen, ist bei diesem Thema zwischen bedingten Anweisungen und Verzweigungen zu unterscheiden.

Bei Wikipedia bin ich mit einer einfachen Erklärung zu beiden Begriffen fündig geworden:

„Eine Bedingte Anweisung ist in der Programmierung ein Programmabschnitt, der nur unter einer bestimmten Bedingung ausgeführt wird. Eine Verzweigung legt fest, welcher von zwei (oder mehr) Programmabschnitten, abhängig von einer (oder mehreren) Bedingungen, ausgeführt wird. Bedingte Anweisungen und Verzweigungen bilden, zusammen mit den Schleifen, die Kontrollstrukturen der Programmiersprachen. Sie gehören zu den wichtigsten Bestandteilen der Programmierung, da durch sie ein Programm auf unterschiedliche Zustände und Eingaben reagieren kann.“ [1]

Aus dem „einfachen“ Excel kennst du die Möglichkeiten, mit der WENN-Funktion in verschiedene Richtungen zu steuern. Möglicherweise hast du auch schon mit der WAHL-Funktion Berechnungen dieser Art ausgeführt.

Dieser Beitrag will Erläuterungen geben, wie mit VBA Verzweigungen programmiert werden können.

Vier Möglichkeiten habe ich dazu heraus gesucht, die das Thema allerdings nicht erschöpfend behandeln dürften.

1. Die Richtung mit If … Then … vorgeben

If … Then …, also Wenn … Dann … ist die einfachste Möglichkeit, das Programm in eine gewünschte Richtung zu treiben. Dies ist die bedingte Anweisung.

Ein Programmschritt wird dann ausgeführt, wenn eine bestimmte Bedingung erfüllt ist. Ist die Bedingung nicht erfüllt, gibt es keine Alternative, das Programm wird an dieser Stelle nicht fortgeführt.

Mit einem Beispiel lässt sich das am besten erklären:

Du hast ein etwas älteres Auto und möchtest es verkaufen. Dazu hast du annonciert.

Deine Preisvorstellung beläuft sich auf 3000 €. Du bist nicht gewillt, darüber zu verhandeln.

Der erste Kaufwillige bietet dir 2500 €. Diesem verkaufst du dein Auto nicht.

In VBA sieht das so aus:

IfThen1

Die Entscheidung in D34 wird durch dieses Makro herbeigeführt:

Sub VerkaufAuto1()
Range(„D34“).ClearContents
If Range(„D32“).Value >=Range(„D31“).Value Then
Range(„D34“) = „Verkaufen“
End If
End Sub

Was geschieht?

Der Inhalt aus Zelle D34 wird zuerst gelöscht. Dann wird die Prüfung vorgenommen. Ist das Angebot gemäß B32 größer oder gleich der Preisuntergrenze in D31, dann schreibe in D34 „Verkaufen“.

Beachte, dass ein If-Block immer mit End If abgeschlossen werden muss. Wenn du das vergisst, sagt VBA dir das.

Liegt das Angebot bei 3000 oder höher, wird durch das Makro in D34 „Verkaufen“ eingetragen. Liegt es darunter, bleibt D34 in diesem Fall leer. Das schafft eine gewisse Unsicherheit, ist das Makro überhaupt gelaufen?

Deshalb kann in einem weiteren Schritt das Makro erweitert werden, indem ein zweiter If-Komplex eingebaut wird. Dieser regelt, dass bei einem Angebot kleiner 3000 in D34 „Nicht verkaufen“ eingetragen wird.

Sub VerkaufAuto2()
If Range(„D32“).Value>=Range(„D31“).Value Then
Range(„D34″)=“Verkaufen“
End If
If Range(„D32“).Value <Range("D31").Value Then
Range("D34")="Nicht verkaufen"
End If
End Sub

Dem ersten Makro habe ich dazu einfach einen zweiten If-Block angehängt und die gegenläufige Regel formuliert. Nun steht in D34 die richtige Entscheidung, das Makro ist also gelaufen.

IfThen11

Aber es geht in VBA noch einfacher.

 

2. Eine Richtung mit If … Then … Else … entscheiden

Bei dieser Anweisung werden im Makro die beiden Anweisungen in einem Zug verarbeitet. Das geht so:

Sub VerkaufAuto3()
If Range(„D32“).Value>=Range(„D31“).Value Then
Range(„D34″)=“Verkaufen“
Else
Range(„D34″)=“Nicht verkaufen“
End If
End Sub

Was ist hieran neu? Das Wörtchen “Else” ist es. Statt also einen zweiten If-Block zu erstellen, schreibe ich nach der ersten Bedingung „Else“, schreibe gleich anschließend die zweite Bedingung und schließe erst dann mit „End If“ ab.

Damit ist die klassische WENN-Abfrage in VBA umgesetzt.

Wenn-Dann-Sonst wird zu If-Then-Else.

Advertisements

Autor: Gerhard Pundt

Auf meiner Site https://clevercalcul.wordpress.com geht es um die Tabellenkalkulation mit Excel. Es wird über Funktionen, Diagramme, Basiswissen u.a.m. geschrieben.

8 Kommentare zu „So realisierst du Verzweigungen in VBA (Teil 1)“

  1. Guten Morgen,

    ich mag IF und ELSE, wobei ich diese mittlerweile auch gerne mit MSGBOX und GOTO anwende um entsprechende Durckausgaben vorzubereiten.

    If MsgBox(„Bericht versenden?“, vbYesNo, „Warning“) = vbYes Then GoTo Druck

    Noch eine kleine Anmerkung zu VerkaufAuto2()

    müste hier nicht für die zweite Bedingung die Zellen getauscht werden?

    If Range(„D31“).Value>=Range(„D32“).Value Then
    Range(„D34″)=“Nicht verkaufen“
    End If

    Ansonsten finde ich beide Beispiele ebenfalls als sehr gelungen und freue mich schon darauf hier Artikel für Artikel die noch offene Lücke im Bereich der VBA Programmierung zumindest ansatzweise schliessen zu können.

    Viele Grüße
    Andreas

    Gefällt mir

    1. Hallo Gerhard,
      ich finde so kleine „Soll“bruchstellen helfen auch den Artikel gut zu verstehen und regen zum Nachdenken an ;-). Man sieht ja schon die unterschiedliche herangehenesweise dadurch, dass ich nicht auf „kleiner als“ gekommen bin sondern nur die Variablen getauscht hatte.

      Gerade bei eigenen Blogartikeln ärgern mich solche Kleinigkeiten dann doch ein wenig und ich bin immer froh, hier entsprechende Hinweise zu erhalten.

      Besonders bei Überschriften war ich sehr froh, dass mich mal jemand auf den FB Debugger hingewiesen hat, so dass hier die Fehler in Überschriften von Artikeln in der Linkvorschau ebenfalls korrigiert werden kann.

      Viele Grüße
      Andreas

      Gefällt mir

    2. Hallo Andreas,
      danke auch für diesen Kommentar. Leider .ist es so, dass ich keinen Korrekturleser habe, so schleichen sich doch gelegentlich Fehler ein, die man einfach nicht selbst sieht.
      Aber anderen Schreibern passiert das auch, wir sind eben nur Menschen. Für Hinweise darauf bin ich immer dankbar.
      Viele Grüße
      Gerhard

      Gefällt mir

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s