Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Excel 2016 VBA Grundkurs

Eindimensionale Arrays

Testen Sie unsere 2021 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Eindimensionale Arrays enthalten viele gleichartige Variablen, die über einen Index angesprochen werden. Bei Bedarf können sie auch dynamisch erzeugt werden, also noch zur Laufzeit ihre Größe ändern.

Transkript

Ich möchte Ihnen die Nutzung eines in diesem Fall eindimensionalen Arrays an einem möglichst einfachen, wenn auch nicht ganz lebensnahen Beispiel zeigen. Das heißt, ich mache eine Liste von Farben. Das erspart mir eine Menge Schreibarbeit. Also Sub ListeFarben. Und darin deklariere ich jetzt ein eindimensionales Array, also Dim strFarben. Sie ahnen schon, es wird ein String-Array. Und jetzt gebe ich an, wie viele Elemente ich brauche. Wenn ich jetzt also 4 schreibe, dann sind da tatsächlich 5 Elemente drin, 0 bis 4. Jetzt kommt As String, der Datentyp. Und dann kann ich hingehen und das füllen. Also strFarben (0). Das erste Element kriegt den Eintrag rot. strFarben das Element mit der Nummer 3, also in Wirklichkeit das vierte Element, kriegt den Eintrag grün. Und strFarben (1), das ist das zweite Element, kriegt den Eintrag blau. Daran mag mehreres überraschen, nämlich erstens, dass ich mich nicht an die Reihenfolge halte. Und das ist völlig Wurst. Sie können Arrays, wenn sie deklariert sind, an beliebigen Stellen füllen. Und zweitens, dass es Lücken gibt. Also zum Beispiel die Position 4 und die Position 2 sind leer. Auch das macht nichts. Da es sich hier um ein String-Array handelt, befinden sich an diesen Positionen Leer-Strings. Wenn es ein Variant-Array wäre, wäre dort der Datentyp Null drin. Und wenn es eine Zahl wäre, IntegerLong oder irgendwie so etwas, dann wäre dort eine Null drin. Also hier sind Leer-Strings. Das macht aber nichts. Und dann kann ich eine Schleife machen. Dazu brauche ich also noch einen Schleifenzähler. Der heißt ganz langweilig wie immer Dim intZaehler As Integer, auch wenn ich die 32 000 als Integer-Datengröße nicht erreichen werde. Und kann jetzt For intZaehler gleich Anfang - also Null, das erste Element hat die Ordnungszahl Null - to Ende, also - kann ich oben nachgucken - to 4 alle durcharbeiten. Und hier schon mal das Next hinschreiben. Da ist schon ein gewisses Risiko, denn es könnte ja sein, dass Sie das später mal ausbessern. Machen Sie es lieber gleich richtig und benutzen Sie eine Funktion, die Ihnen von einem Array sagt, wie viele Elemente oder besser gesagt, welche Nummer das oberste Element hat. Die heißt ubound, upperbound - die obere Grenze. Und dann geben Sie an, welches Array. Manchmal brauchen Sie noch einen zweiten Parameter. Das wäre zum Beispiel von einem zweidimensionalen Array die zweite Dimension, die Spalte nennen wir sie mal. Dieses ist nur eindimensional, deswegen können Sie sich das sparen. Also das steht sozusagen für die Nummer 4. Das ist immer dann wichtig, wenn man hier später mal was ändert; dann wird das automatisch ermittelt. Sollte man sich also direkt angewöhnen. Und jetzt kann ich hier mit Debug.Print einfach herausschreiben: die Farbe, sagen wir Nummer - und jetzt kommt der Zähler zum Einsatz. Dann nach dem Doppelpunkt der wiederum verkettete eigentliche Farbname. Der steckt im Array. Also strFarben Klammer auf. Und jetzt der soundsovielste, also der vom Zähler vorgegebene, der mit Klammer zu dann ermittelt wird. Hier ist die Position in einem Array mit angegeben. Und Sie müssen nur darauf achten, dass der Zähler von 0 bis 4 geht, und nicht etwa von 1 bis 5. Dann noch mit Debuggen Kompilieren die Prüfung, dass es syntaktisch in Ordnung ist, und dann können wir mal gucken - mit F5 einmal durchlaufen. Sie sehen, die Farben 0, 1, 2, 3, 4, ist rot, blau. Blau ist ja an der Position 1. Die zweite Position mit der Nummer 1. Und hier ist grün. Das ist jetzt sozusagen das normale Array. Und zwar das nicht-dynamische, das statische Array, und zwar eindimensional. Das möchte ich jetzt gerne erweitern, sodass ich später auch noch Farben hinzufügen kann. Immer, wenn mir einfällt, da kommt ja noch eine Farbe, die ich aus irgendeinem Grund entdecke, zum Beispiel wenn man Dateien analysiert und in den Inhalten die Farben sucht, dann muss ich das Array erweitern können. Dazu machen ich eine Kopie. Das können wir mal als statisch hier festhalten. Und dann kopiere ich das davor. Und das wird jetzt dynamisch. Dann haben Sie es im Vergleich. Der wesentliche Unterschied beim dynamisch ist, dass hier in den Klammern keine Zahl drinsteht. Da ist sozusagen nur angekündigt: Da kommt nochmal was. Aber es ist noch nicht wirklich ein Array deklariert, sondern nur der Anlauf genommen, wenn ich das mal so sagen darf. Irgendwann, bevor Sie nämlich Daten zuweisen, also vor dieser Zeile hier, müssen Sie das Array redimensionieren. Also das heißt dann ReDim und strFarben Klammer auf. Dann sagen Sie jetzt endgültig, wie viele es werden. Ich mache jetzt mal einfach mit Absicht eine 7. Und schreibe schon mal dazu: endgültige Dimensionierung. Mit vorläufiger... Ich schreibe es mal in Anführungszeichen, denn eine Dimensionierung ist es ja nicht. Also diese Zeile hier mit ReDim muss irgendwann stattgefunden haben, bevor Sie erstmalig da was reinschreiben können. Sonst gibt es sofort einen Laufzeitfehler. Nun ist bisher noch nichts besonders verbessert, außer dass Sie jetzt Glück haben, weil Sie rechtzeitig ubound abgefragt haben. Das kümmert sich also selbstständig da drum, wie viel da oben eigentlich erlaubt ist. Und ich könnte jetzt ohne Bedenken zum Beispiel in die Position mit der Nummer 5 schon was reinschreiben. Aber ich will das Array erweitern. Es ist im Moment 7 Positionen groß, von denen einige leer sind. Und jetzt möchte ich es erneut größer machen. Also wieder ein ReDim, so wie eben auch, strFarben. Aber es hat ja schon eine Größe. Ich muss also die bisherige Größe berücksichtigen. Ich kann natürlich einfach 8 reinschreiben, aber das Risiko würde ich nicht eingehen. Ich frage die bisherige Größe wieder ab, zähle einen drauf, und das ist dann die neue Größe. Also das ist so die typische Schreibweise, wenn Sie ein Array um 1 erweitern wollen. Und weil das ja jetzt um 1 erweitert ist - ich merke mir diesen Eintrag schon mal direkt - darf ich jetzt direkt schreiben: strFarben. Und zwar der letzte Eintrag - Achtung, da müssen Sie aufpassen: Hier haben Sie eine bisherige Größe genommen, um 1 erhöht und dann mit ReDim die Größe des Arrays verändert. Wenn Sie jetzt mit ubound das nochmal abfragen, kriegen Sie ja schon die neue Größe. Sie dürfen also nicht nochmal eins draufzählen. Diese Zeile ist noch nicht fertig; das sehe ich unter anderem an diesem Leerzeichen, das da nicht hingehört. Ich muss da natürlich einen neuen Eintrag machen. Und da denken wir uns jetzt irgendeine Farbe aus. Egal, wie groß das Array ist, an der letzten Position, nämlich hier - da steht jetzt der Eintrag lila. Dann gucken wir mal, wie es funktioniert, der Rest ist ja wie vorher auch. Einmal speichern... ausführen und überrascht gucken. Sehen Sie was? Da sehen Sie nichts. Da ist nur noch das lila drin. Das Array ist zwar vergrößert worden, auf insgesamt 9 Elemente, von 0 bis 8, aber der Rest ist leider leer. Da muss man immer aufpassen; nach ReDim ist das Array erst mal komplett leer. Und wenn Sie das nicht haben wollen, müssen Sie ein Preserve dazwischen schreiben, also ReDim Preserve. Ich kann Ihnen versprechen, das werden Sie eigentlich immer haben wollen. Dass das Array anschließend leer geräumt ist, ist eher nicht Ihr Wunsch. Erweitert das Array, und zwar nur mit Preserve, um die bisherigen zu erhalten. Und wenn ich jetzt das Gleiche ausführe mit F5, dann sehen Sie, sind auch die bisherigen Eintragungen erhalten. Und im Moment ist das Array 8 Elemente groß, plus diesem einen lila. Und das kann ich jetzt hier nach Belieben verändern. Wenn ich sage: Ich brauche aber nur 4, kann ich direkt mit F5 laufen lassen. Und es ist dynamisch unflexibel wegen ubound, weil ich das an den passenden Stellen immer abfrage und mich nie darauf verlasse. Also der Klassiker, um ein bereits vorhandenes Array zu erweitern, ist diese Zeile. Und zwingend notwendig, um es überhaupt erstmalig benutzen zu können, ist diese Zeile. Also nach einem Dim mit leeren Klammern, ein dynamisches Array ohne Echt-Dimensionierung, müssen Sie es wenigstens einmal dimensionieren. Und danach können Sie es hier nochmal erweitern, müssen dann aber bitte an das Preserve denken.

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
Erscheinungsdatum:30.08.2016

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!