VBA für Einsteiger - MS Excel 2003 (5)

Von: Dieter Frommhold
Stand: 18. August 2006
Beitrag bewerten
Anmelden um Kommentare zu schreiben

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
Jetzt Probemitglied werden
Ich kann in den 14 Tagen Probezeit formlos z.B. per E-Mail stornieren. Wenn ich das nicht tue, entscheide ich mich für ein