Supportnet Computer
Planet of Tech

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

Antwort 3 von piano

Hallo
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!!:)

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: