Excel 2016 VBA Grundkurs

Einfache Select-Anweisung

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Anstatt schwierige If-Konstruktionen zu programmieren, lässt sich das meistens mit einer Select-Anweisung erledigen. Dadurch wird der Code deutlich übersichtlicher und damit fehlerärmer.

Transkript

Ich möchte Ihnen zeigen, warum das "Select Case" soviel übersichtlicher ist, als ein normales "If" Dazu habe ich schon eine Prozedur vorbereitet, die hier in einem eigenen Modul steht. welches zwar schon "SelectCase" heißt, aber noch keines enthält. Die möchte ich mir erstmal gemeinsam mit Ihnen angucken das heißt dieser Teil hier hinten, der das "If" enthält, den kann ich schon mal wegkommentieren, damit wir den Rest testen können. Und was ich mache, ist lediglich, eine Long-Zahl als Variable zu deklarieren, und mit einer InputBox diese Zahl abzufragen. Diese InputBox ist das Gegenstück zur MessageBox. Sie dient dazu Werte einzugeben, ohne gleich ein ganzes Formular basteln zu müssen. Also hier wird die InputBox erzeugt. Und die bietet natürlich die Möglichkeit abzubrechen, und wenn sie abbricht, liefert sie einen Leer-String zurück. Und einen Leer-String kann man natürlich einer Long-Zahl nicht zuweisen. Deswegen steht hier zusätzlich die Value-Funktion. Die nimmt alles das, was da drin steht, nämlich einen Text üblicherweise, und wandelt ihn in eine Zahl um. Und wenn der Text nicht umwandelbar ist, wandelt "Value" ihn in eine null um. Und das ist die praktische Lösung dabei. Es kommt wenigstens eine null an, und ansonsten irgendeine gültige Zahl. Wenn ich das jetzt starte - der Rest wird ja nicht ausgewertet - dann sehen Sie mit F5 schon mal, wie es aussieht. Hier ist mein Titel, den hatte ich da als Konstante drin. Hier ist der Text, den ich vorgebe. Hier könnte ich jetzt abbrechen, dann passiert hier nichts. Passiert sowieso nicht, aber dann wäre es eine null. und mit F5 kann ich jetzt hier irgendeine Zahl eingeben, mit OK bestätigen, im Moment passiert aber auch noch nichts. Das ist also grundsätzlich erstmal die Funktionalität von der InputBox, die Sie entweder auf Leer-String prüfen müssen, um das Abbrechen rauszukriegen, oder hier jetzt einfach mit der Value-Funktion garantiert in eine Zahl umwandeln. Und jetzt kann ich das hier wieder freigeben, dafür gibt es dieses Symbol hier. Und Sie sehen jetzt, dass ich verschiedene Prüfungen mache. Ich gucke, ob das Ganze vielleicht eine null ist, und dann werden hier ganz langweilig mit "debug.Print" Werte rausgeschrieben. Oder, ich prüfe, ob es sich vielleicht um eine eins, eine drei, eine neun oder eine 15 handelt, und vermerke das entsprechend im Debug-Fenster. Außerdem, ob es eine Zahl ist, die größer 20 und kleiner 30 ist, Da es ganzzahlige Werte sind, Long-Zahlen, kann es sich also nur um die Zahlen 21 bis 29 handeln. Und schließlich prpüfe ich, ob die Zahl vielleicht über 100 ist. Und dann gibt es immer noch ein paar Zahlen, die übrig sind, die dann von dem "Else"-Zweig erfasst werden. Es sind also mehrere "ElseIf"s drin, mit durchaus unpraktisch langen Bedingungen, wie das sehr schnell vorkommen kann. Und wenn ich das jetzt ausführe mit F5, und ich schreibe beispielsweise eine 123 rein, die übrigens erstmal als String ankommt, aber mit Value-Funktionen dann in den Wert umgewandelt wird, dann wird nach dem OK erkannt, dass sie größer als 100 ist. Das ist korrekt. Und wenn ich es direkt nochmal starte... Sagen wir, ich gebe eine "5" ein, nach dem OK. Das ist eine andere Zahl, den die ist weder bei 1, 3, 9, 15 dabei, noch zwischen 20 und 30, noch größer als 100. Es funktioniert alles. Die Übrigen muss ich jetzt nicht durchprobieren. Aber es ist unübersichtlich. Und deswegen will ich - ich mache das mal davor, die schiebe ich ein bisschen runter - eine neue Prozedur schreiben, die das Gleiche macht, aber sehr viel besser. Also "Sub AuswahlBesser". Und da werde ich praktisch nichts übernehmen, zumindest am Anfang nicht, außer diesem Stückchen hier. Das ist der Kern, den ich auch brauchen werde. Und ich fange direkt mit "Select Case" an. Und die Zahl, die untersucht werden soll, schreibe ich direkt hier rein. Eine Function, die durch ihr eigenes Ergebnis ersetzt wird sozusagen. Das "End Select" kann ich schon mal ergänzen. Also hier muss keineswegs eine Variable hinter "Select Case" stehen, sondern ich kann dort auch eine Function schreiben, oder sogar geschachtelte Functions, die dann eine Zahl zurückgeben. Es muss nur irgendwann im Ergebnis da eine Zahl auftauchen. Und jetzt kann ich schön schreiben "Case0". Und anstatt jetzt in der nächsten Zeile das "debug.Print" zu schreiben, mache ich sogar das in die gleiche Zeile. indem ich mit einem Doppelpunkt dem Compiler erkläre: Achtung, das sind eigentlich zwei Zeilen. Meine Augen haben eine Zeile, mein Compiler hat zwei Zeilen. Mit der Tab-Taste kann ich jetzt ein bisschen einrücken. Und das können wir rüberkopieren, die eigentlichen Texte also. Da sagen wir mal ungefähr hin, - das kann ich gleich noch ein bisschen hübscher machen - das ist die erste Bedingung. Jetzt steht hier: Wenn die Zahl eins ist, oder wenn die Zahl drei ist, oder wenn die Zahl neun ist, oder wenn die Zahl 15 ist. Das geht im "Case" viel kürzer. "Case 1, 3, 9, 15", und schon fertig. Und nach dem Doppelpunkt, - damit ich in der gleichen Zeile wieder weiterschreiben darf - kommt jetzt hier entsprechend die zweite Debug-Angabe. Deswegen kann ich den mit der TAB-Taste jetzt da nur für die Schönheit einrücken. Das hat den Vorteil, dass es nachher einfach viel besser zu lesen ist. Jetzt prüfe ich, ob die Zahl zwischen 20 und 30 ist, ob sie größer 20 und kleiner 30 ist, da kommt also das "Is", "Case Is", größer 20, das wäre die eine Variante, aber da ich Bereiche habe, von bis, kann ich direkt schreiben "20 to 30". Das kann ich nicht, das war nämlich gerade ein Fehler. Denn das "Case 20 to 30" würde 20 und 30 inklusive nehmen, ich muss also ausdrücklich "Case 21 to 29" schreiben. Wie eben schon erwähnt ist es eine Long-Zahl, also ganzzahlig. Ich muss mich nicht um Nachkommawerte kümmern. Die nächste ganzzahlige Zahl über 20 ist die 21. Und da kommt jetzt der entsprechende Debug-Befehl hin. Und dann sind wir bei größer 100. Es ist kein Wertebereich, ich kann jetzt also direkt schreiben "Case Is 100", Doppelpunkt und das "debug.Print" da oben hin kopieren. Ud schließlich "Case Else". Und da kommt entsprechend das ist eine andere Zahl. Das Einrücken dieser "debug.Print"-Befehle ist nicht nötig. - kürze das mir hier ein bisschen, damit man es besser sieht - das ist nicht nötig, aber Sie sehen, es ist viel besser zu lesen. Hier sind die zwei auch eingerückt, aber die verschwinden hier in diesen langen Bedingungen, und hier haben Sie die alle schön untereinander. Jetzt können wir nochmal eben zählen, eins, zwei, drei, vier, fünf Bedingungen, "Case" eins , zwei, drei, vier, fünfmal "Case". So, und das tut genau das Gleiche, das sollten wir wenigstens überprüfen. Also mit F5. Die 123, erzeugt hier die Meldung, dass es größer als 100 ist. Alles wunderbar. Und die 5 war der andere Test, erzeugt die Meldung, dass es eine irgendwie übergebliebene Zahl ist. Das ist also deutlich kürzer, und macht den Code damit fehlerfreier, weil er übersichtlicher ist.

Excel 2016 VBA Grundkurs

Lassen Sie sich systematisch in die Excel-Programmierung mit Visual Basic for Applications (VBA) einführen.

7 Std. 25 min (66 Videos)
Derzeit sind keine Feedbacks vorhanden...
Hersteller:
Exklusiv für Abo-Kunden
Ihr(e) Trainer:
Erscheinungsdatum:30.08.2016
Laufzeit:7 Std. 25 min (66 Videos)

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!