Feldvariablen
Erinnern Sie sich bitte an das Beispiel zur Auswertung der größten von vier eingegebenen Zahlen aus dem vorigen Seminar VBA für Einsteiger (4): Fehler finden.
Code:
Option explizit
Dim ErsteZahl As Double, ZweiteZahl As Double, DritteZahl As Double, VierteZahl As Double
Dim Größte As Double
Sub Die_größte_von_von_vier_Zahlen()
'Eingabe
'Das programmiert man besser als Zyklus mit Feldvariablen
ErsteZahl = InputBox("Die erste Zahl bitte.", "Eingabe")
ZweiteZahl = InputBox("Die zweite Zahl bitte.", "Eingabe")
DritteZahl = InputBox("Die dritte Zahl bitte.", "Eingabe")
VierteZahl = InputBox("Die vierte Zahl bitte.", "Eingabe")
Größte = ErsteZahl
If Größte < ZweiteZahl Then Größte = ZweiteZahl
If Größte < DritteZahl Then Größte = DritteZahl
If Größte < VierteZahl Then Größte = VierteZahl
MsgBox "Die größte der eingegebenen Zahlen ist die " & Größte, , "Ergebnis"
End Sub
Obige Lösung kann eigentlich als hilflos bezeichnet werden, denn die Prozedur funktioniert nicht bei Eingaben von mehr oder weniger als vier Zahlen.
Wie lösen Sie das Problem für 5 oder 10 oder gar noch viel mehr Variablen? Das effektivste Resultat ermöglichen so genannte Feldvariable:
Code:
Dim Zahlen(10) As Double ' Sie können mit 10 Variablen vom Typ Double arbeiten
Zahlen(5)=13.456 'Ihre 5. Zahl wird geladen
Zahlen(9)=Zahlen(5)* 10 'In Ihrer 9.Zahl wurde als Ergebnis 134,56 zugewiesen
Dim Namen(100) As String ' Sie können auf 100 Namen vom Typ String zugreifen
Namen(30)= "Zwanziger" ' Komisch aber wahr
Im obigen Beispiel haben die Felder noch festen Umfang (10 Variable oder 100 Variable).
Ein dynamisches Feld wird so angelegt, dass es immer nur soweit wächst, wie Sie es benötigen. Am Ende haben Sie genauso viele Variable, wie Sie aktuell brauchen.
Sehen Sie sich in der beigefügten Lösungsdatei im Modul Felder die Prozedur Die_größte_Zahl an.
Code:
Sub Die_größte_Zahl()
'Eingabe
'Zyklus mit Feldvariablen
Dim Zahlen()
Dim I As Integer, Anzahl As Integer
Dim Größte
Anzahl = InputBox("Wieviele Zahlen wollen Sie jetzt eingeben?", "Bitte nicht mehr als 32767")
ReDim Zahlen(Anzahl)
For I = 1 To Anzahl
Zahlen(I) = InputBox("Die " & I & ". Zahl bitte.", "Eingabe")
Next
Größte = Zahlen(1)
For I = 2 To Anzahl
If Größte < Zahlen(I) Then Größte = Zahlen(I)
Next
MsgBox "Die größte der eingegebenen Zahlen ist die " & Größte, , "Ergebnis"
End Sub
Das dynamische Feld Zahlen() wird zuerst mit allen (leeren) Variablen mit der Anweisung ReDim Zahlen(Anzahl) angelegt. Diese werden im Zyklus For I=1 To Anzahl nacheinander mit aktuellen Werten versehen.
Die größte Zahl wird im folgenden Zyklus ermittelt.
Die Annahme, dass Zahlen(1) die größte wäre wird zyklisch geprüft.
Es wird immer kontrolliert, ob der Inhalt der Variablen Größte wirklich größer als der der aktuelle Feldvariable ist. Ist dieser größer als Größte, bekommt diese den Wert der aktuellen Feldvariablen zugewiesen.
Prüfen Sie das bitte mit den Ihnen bekannten Testhilfen.
ReDim Zahlen(Anzahl)vergrößert zwar die Anzahl der Variablen des Feldes, legt aber das gesamte Feld neu an. Das bedeutet, alle bereits vorhandenen Variablen verlieren ihren Inhalt. Mit ReDim Preserve Zahlen(Anzahl)wird während der Arbeit der Prozedur die Größe des dynamischen Feldes verändert. Und zwar, ohne dass die bereits bestehenden Variableninhalte verloren gehen. So zu sehen später in Prozedur Die_größte_Zahl2 Modul Felder in Kapitel 5.
Dies ist eine Leseprobe
Möchten Sie den Beitrag komplett lesen? Dann werden Sie Probemitglied und testen Sie akademie.de 14 Tage kostenlos!
Auf VBA Excel 2003 (5): Steueranweisungen und Felder erfahren Sie mehr über diesen Beitrag und die weiteren Leseproben.
Weitere Informationen finden Sie auf unserer Infoseite zur Mitgliedschaft und in unseren AGB.
Ich bin bereits Mitglied