Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Collection aus ForEach Schleife bilden & auswerten

Collection aus ForEach Schleife bilden & auswerten
18.07.2008 21:49:19
Andreas
Hallo Herber Fans,
ich bin wie so oft in der letzten Zeit in Sachen PivotTabelle unterwegs und habe heute auch wieder einige gute Codes realisieren können. Das schöne daran ist, daß heute bisher alles in Eigenregie mit dem hier im Forum Gelernten entwickelt werden konnte.
Nun hänge ich aber doch fest. Vielleicht ist es schon zu spät, aber auch mit der Hilfe des Forumarchives bekomme ich es nicht hin.
Ich möchte eine Collection bilden – und zwar aus den Längen von PivotItems eines Spaltenfeldes, die ich über eine For Each Schleife einzeln ermittle und einer Collection über Add hinzufüge.
Wenn die Schleife für alle PivotItems durchgelaufen ist, dann möchte ich den Maximalwert der Collection über die WorksheetFunction.Max ermitteln. Dort hänge ich gnadenlos fest, obwohl es vermutlich banal ist.
Des Weiteren frage ich mich, ob ich aus einer Collection auch andere Werte ermitteln kann. Bspw. möchte ich nicht nur den Min oder Max Wert ermitteln, sondern über einen Index möchte ich aus der Collection bspw. den 2. Wert rausziehen. Also z.B. MsgBox „Der zweite Wert der Collection ist:“ & Coll(2).Value.
Ich würde mich sehr, sehr freuen, wenn mir jemand sagen kann, ob und wie ich es lösen kann, wo mein Denkfehler in dem, an sich kurzen, Code ist. Ich habe schon oft über Collection und Array nachgedacht, um eine solche Sammlung erst anzulegen und dann anderweitig auszuwerten, aber nie realisieren können.
https://www.herber.de/bbs/user/53960.xls
Vielen Dank für Eure Hilfe und allen hier ein schönes Wochenende.
Gruß aus Berlin, Andreas

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Collection aus ForEach Schleife bilden & auswe
18.07.2008 22:04:00
Uduuh
Hallo,
nimm anstatt eine Collection ein Array.
Gruß aus’m Pott
Udo

AW: Collection aus ForEach Schleife bilden & auswerten
19.07.2008 07:03:00
Erich
Hallo Andreas,
probier mal

Sub tst()
Dim pvItem As PivotItem, lngA As Long, arrW() As Integer, ii As Long
With ActiveSheet.PivotTables(1)
With .ColumnFields(.ColumnRange.Range("B1").Value)
lngA = .PivotItems.Count
MsgBox "Anz: " & lngA
ReDim arrW(lngA - 1)
For ii = 1 To lngA
arrW(ii - 1) = Len(.PivotItems(ii).Name)
Next
'oder
'        For Each pvItem In .PivotItems
'           arrW(ii) = Len(pvItem.Name)
'           ii = ii + 1
'        Next
MsgBox "Min: " & Application.Min(arrW)
MsgBox "Max: " & Application.Max(arrW)
MsgBox "Sum: " & Application.Sum(arrW)
MsgBox "Avg: " & Application.Average(arrW)
End With
End With
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Collection aus ForEach Schleife bilden & auswerten
21.07.2008 16:16:32
Andreas
Hallo Erich,
Dein Code funktioniert wunderbar. Er liest alle Werte korrekt ein und man kann mit Ihnen auch korrekt weiterrechnen.
Dank und Gruß, Andreas
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Collection aus ForEach Schleife in Excel VBA erstellen und auswerten


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und erstelle ein neues VBA-Modul. Dazu drücke ALT + F11, um den VBA-Editor zu öffnen, und füge ein neues Modul hinzu.

  2. Füge den folgenden Code ein, um eine Collection aus den Längen von PivotItems zu erstellen:

    Sub CreateCollectionFromPivotItems()
        Dim Coll As Collection
        Set Coll = New Collection
        Dim pvItem As PivotItem
        Dim lngA As Long
    
        With ActiveSheet.PivotTables(1).ColumnFields(1)
            lngA = .PivotItems.Count
    
            For Each pvItem In .PivotItems
                Coll.Add Len(pvItem.Name)
            Next pvItem
        End With
    
        ' Maximalwert ermitteln
        MsgBox "Max: " & Application.WorksheetFunction.Max(Coll)
    End Sub
  3. Führe den Code aus, um die Collection zu erstellen und den Maximalwert zu ermitteln.

  4. Um weitere Werte aus der Collection zu ziehen, kannst Du die folgende Zeile hinzufügen:

    MsgBox "Der zweite Wert der Collection ist: " & Coll(2)

Häufige Fehler und Lösungen

  • Fehler: "Object variable or With block variable not set"

    • Lösung: Stelle sicher, dass das PivotTable-Objekt korrekt referenziert wird. Überprüfe, ob das PivotTable auf dem aktiven Blatt vorhanden ist.
  • Fehler: "Index außerhalb des gültigen Bereichs"

    • Lösung: Achte darauf, dass die Collection nicht leer ist, bevor Du versuchst, auf einen Index zuzugreifen.

Alternative Methoden

Eine Alternative zur Verwendung von Collections ist die Nutzung von Arrays. Du kannst die Längen der PivotItems in ein Array speichern und anschließend die Werte auswerten. Der Code könnte folgendermaßen aussehen:

Sub UseArrayInsteadOfCollection()
    Dim arrW() As Long
    Dim lngA As Long, ii As Long

    With ActiveSheet.PivotTables(1)
        lngA = .PivotItems.Count
        ReDim arrW(0 To lngA - 1)

        For ii = 1 To lngA
            arrW(ii - 1) = Len(.PivotItems(ii).Name)
        Next ii

        MsgBox "Max: " & Application.Max(arrW)
    End With
End Sub

Praktische Beispiele

Ein häufiges Beispiel ist die Ermittlung der Länge der Namen von PivotItems in einer PivotTable. Mit der oben genannten CreateCollectionFromPivotItems-Methode kannst Du schnell die Längen analysieren und verschiedene statistische Werte wie Minimum, Maximum und Durchschnitt ermitteln.


Tipps für Profis

  • Verwende For Each-Schleifen, um durch Objekte zu iterieren. Sie sind besonders nützlich, wenn Du mit Sammlungen (vba collection) arbeitest.

  • Nutze die WorksheetFunction-Methoden, um Werte aus Arrays oder Collections effizient zu analysieren.

  • Erstelle eine VBA Codesammlung für häufig verwendete Routinen, um Deine Programmierarbeit effizienter zu gestalten.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Collection und Array in VBA?
Eine Collection kann dynamisch wachsen und die Elemente können von verschiedenen Datentypen sein. Ein Array hat eine feste Größe und muss zu Beginn definiert werden.

2. Wie kann ich einen bestimmten Wert aus einer Collection abrufen?
Du kannst den Wert mit Coll(Index) abrufen, wobei Index die Position des Wertes in der Collection ist.

3. Was mache ich, wenn ich mehr Informationen über die PivotItems benötige?
Du kannst weitere Eigenschaften wie pvItem.DataRange oder pvItem.Position in Deiner Schleife einfügen, um zusätzliche Informationen zu erhalten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige