VBA Array Frage

Pyrukar

Captain
Registriert
Jan. 2013
Beiträge
3.458
Guten Morgen,

ich hab heute mal wieder Vor eine meiner Tabellen mit VBA ein bisschen schlauer zu machen :) Dabei ist die Datei so aufgebaut, dass auf Tabelle1 die ergebnisse Zusammengefasst werden und auf Tabelle2,Tabelle3 und Tabelle4 die dafür notwenigen Daten liegen. Auf Tabelle 2-4 werden jeweils die selben Zellen eingelesen und jeweils in ein Array abgespeichert. Bisher habe ich für jedes Tabellenblatt ein Array gehabt, was jedoch in 3x mehr oder weniger dem gleichen Code mündet.
Da man Excel VBA Code nicht kollabieren kann bin ich natürlich bestrebt den Code so Schlank wie möglich zu halten ... Die Lösung dafür wäre ein 2 Dimensionales Array statt 3 Eindimensionalen Arrays zu haben. Problem ist aber dass ich ja das ganze in der Form vorliegen habe:
Code:
For i=1 to 200
    xyz(i)=Tabelle2.Cells(3+i,5)
next
Was ich dann aber bräuchte wäre ja ungefär
For i=1 to 200
xyz(i)=Tabelle2.Cells(3+i,5)
next
Code:
For k=1 to 3

    For i=1 to 200
        xyz(k,i)=Tabelle(1+k).Cells(3+i,5)
    next
next

afaik ist dies aber nicht möglich ... wie kann ich je nach Zählervariable das Tabellenblatt wechseln? bzw gibt es eine andere Möglichkeit?

bisher sieht mein code ungefär so aus:
Code:
For i=1 to 200
    xyz(i)=Tabelle2.Cells(3+i,5)
    abc(i)=Tabelle3.Cells(3+i,5)
    def(i)=Tabelle4.Cells(3+i,5)
next

Da das einlesen natürlich nicht nur ein Einzeiler ist, wird es dadurch schnell unübersichtlich und Fehleranfällig :( zumal ich bei der Ausgabe auch statt einer Doppelschleife und einem 2 Dimensionalen Array auch 3 Eindimensionale Arrays aufrufen muss :)

Gruß
Pyrukar

PS: ich bin kein Programmierer, daher hab ich, auch oben Option Base 1 eingegeben bevor sich jemand wundert warum ich das Array erst mit der 1 befülle und nicht mit der 0 ;) ich finds so angenehmer :)
 
Code:
For j=1 to 3
    For i=1 to 200
        xyz(i,j)=Sheets(j).Cells(3+i,5)
    Next
Next

;)
 
ist es wirklich so einfach :) Ist Sheets nicht einfach der Englische Begriff für Tabellenblatt ... warum funktioniert es dann mit dem Tabelle(2). nicht ... da hat er mir einen Fehler geworfen :)
 
Ich meine, man kann da eben auch den Namen der Tabellenblätter verwenden. Wenn du jetzt also eines umbenennst in "sdffg", dann kannst du im Code auch "sdffg" verwenden. Sprich, "Tabelle1" etc. ist schlicht der String als Name. Kann mich aber auch irren, hab grade nix zum Testen da.
 
Die Antwort von @till69 war tatsächlich genau was ich gesucht habe, danke dafür :)
 
Zurück
Oben