Supportnet / Forum / Tabellenkalkulation
Schleifen über Listen oder Arrays
Frage
Hallo zusammen!
Ich habe folgende Problemstellung: In einer Excel-Datei sind bis zu 200 Excel-Sheets, die alle die gleiche Struktur haben. Das erste Sheet enthält allerdings keine eigenen Daten, sondern soll die Daten der 199 restlichen Sheets aufsummieren. Problem ist, das diese Daten quer in den Blättern verteilt sind, also nicht alle schön untereinander in einem zusammenhängenden Bereich stehen.
Auf jeden Fall möchte ich dieses Problem mit einem Makro lösen. Ohne würde es auch nicht gehen weil ich nicht im Voraus sagen kann, wie viele/welche Sheets letztendlich aufsummiert werden sollen. Die 199 einzelnen Sheets werden vor der Aufsummierung in die Excel-Datei mit dem Summary Sheet kopiert (dazu brauche ich also eine Schleife über die vorhandenen Sheets). D.h. bitte keine Vorschläge mit „Daten konsolidieren“!
Meine Idee als Java-Programmiererin:) wäre eine Datenstruktur, also Array oder Liste in der ich diese – für alle Sheets – festen Zellbereiche speichern könnte um dann mit zwei Schleifen durch dieses Array und die 199 Sheets durchlaufen zu können und die Daten aufsummieren zu können.
[b] Kurz gesagt[/b]: Was ich jetzt eigentlich brauche ist eine Datenstruktur bzw. die Definition – so was in der Art wie x = Liste(<Zellbereiche>) – und dann eine Schleife über diese Liste (+ wie greife ich der Reihe nach auf die einzelnen Elemente des Arrays zu?) und eine Schleife über die Sheets (+ wie kombiniere ich aktuellen Zellbereich und Sheetname um auf den entsprechenden Inhalt Zugriff zu erhalten).
Wäre klasse, wenn mir hier einer von euch Excel-Spezialisten weiterhelfen könnte!;) Ich bin auch für bessere Vorschläge offen, wenn sie nicht zu umständlich/aufwendig sind…
Viele Grüße,
Peejay
Antwort 1 von piano
Hallo
Hier je ein Beispiel für die gewünschten Schleifen:
Ich hoffe, Du kannst was damit anfangen.
Gruß piano
Es wäre nett, wenn Du ein Feedback abgeben könntest,
ob der Lösungsvorschlag Dein Problem gelöst hat.
Hier je ein Beispiel für die gewünschten Schleifen:
Sub Sheet_Schleife()
Dim Anz, i
Anz = ActiveWorkbook.Sheets.Count
Sheets(1).Activate
For i = 2 To Anz
Sheets(1).Cells(1, 1).Value = Sheets(1).Cells(1, 1).Value + Sheets(i).Cells(1, 1).Value
Next i
End Sub
Sub Aray_Schleife()
Dim MyArray(), i As Integer
Anz = ActiveWorkbook.Sheets.Count
ReDim MyArray(1 To Anz)
For i = 1 To Anz
MyArray(i) = Worksheets(i).Name
Next i
End Sub
Ich hoffe, Du kannst was damit anfangen.
Gruß piano
Es wäre nett, wenn Du ein Feedback abgeben könntest,
ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 2 von Peejay Joy
Hi piano,
vielen Dank für deine schnelle Hilfe! Die erste Schleife ist schon super, aber ich bräuchte um diese Schleife herum noch eine Schleife in der ich durch ein Array mit den verschiedenen Zellbereichen laufen kann.
Also z.B. so (Syntax der fetten Zeichen (=Code den ich reingebastelt hab´) ist wahrscheinlich Quatsch:)...
Sub Sheet_Schleife()
Dim Anz, i
Dim c As Cells
TheArray = TheArray(Cells(1,4), Cells(3,7), Cells(6,8))
Anz = ActiveWorkbook.Sheets.Count
Sheets(1).Activate
For each c aus TheArray
For i = 2 To Anz
Sheets(1). c.Value = Sheets(1). c.Value + Sheets(i). c.Value
Next i
End Sub
Weißt du dazu noch eine Lösung?
Grüße,
Peejay
vielen Dank für deine schnelle Hilfe! Die erste Schleife ist schon super, aber ich bräuchte um diese Schleife herum noch eine Schleife in der ich durch ein Array mit den verschiedenen Zellbereichen laufen kann.
Also z.B. so (Syntax der fetten Zeichen (=Code den ich reingebastelt hab´) ist wahrscheinlich Quatsch:)...
Sub Sheet_Schleife()
Dim Anz, i
Dim c As Cells
TheArray = TheArray(Cells(1,4), Cells(3,7), Cells(6,8))
Anz = ActiveWorkbook.Sheets.Count
Sheets(1).Activate
For each c aus TheArray
For i = 2 To Anz
Sheets(1). c.Value = Sheets(1). c.Value + Sheets(i). c.Value
Next i
End Sub
Weißt du dazu noch eine Lösung?
Grüße,
Peejay
Antwort 3 von piano
Hallo
Leider weiß ich auch nichts besseres als:
Gruss piano
Leider weiß ich auch nichts besseres als:
Sub Sheet_Schleife()
Dim Anz, i, i1 ´, AnzArr As Integer
Dim c As Range
AnzArr = 3
Dim thearray(3)
thearray(1) = "D1"
thearray(2) = "G3"
thearray(3) = "H6"
Anz = ActiveWorkbook.Sheets.Count
Sheets(1).Activate
For i1 = 1 To AnzArr
For i = 2 To Anz
Sheets(1).Range(thearray(i1)).Value = Sheets(1).Range(thearray(i1)).Value + Sheets(i).Range(thearray(i1)).Value
Next i
Next i1
End Sub
Gruss piano
Antwort 4 von Peejay Joy
Super, dank dir!!:)