![]() |
Betrifft: Gruppieren
von: Stef26
Geschrieben am: 31.10.2014 13:59:24
Hallo Zusammen,
bräuchte mal Unterstützung von euch...
Ich lad mir aus SAP immer wieder SAP Stücklisten aus.
Dies sind Mehrstufig und enorm groß.
Um einen besseren Überblick in Excel zu erreichen würde ich diese gerne Gruppieren.
In der Spalte A steht die Stufe:
Beispiel (soll nur als Hinweis für die Struktur gedacht sein)
Stufe Teil
1 Kaufteil
2 Gerät
3 Blechtei 1
4 Blech
4 Niet
4 Schraube
3 Blechteil 2
4 Blech
4 Niet
4 Schraube
2 Bedienungsanweisung
2 Netzstecker
3 Netzteil
3 Anschlussleitung
1 Rechnung
Hab auch so was ähnliches schon im Netz gefunden, allerdings sind meine VBA Kenntnisse nicht ausreichend um das für meine Zwecke umzuschreiben...
Hier den Code den ich gefunden habe...
Sub Gruppieren() Dim Zelle As Range, wks As Worksheet Dim Stufe As String Set wks = ActiveSheet With wks For Each Zelle In .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)) If Zelle.Value = 1 Then Zelle.Rows.Group End If Next End With End SubHier wird allerdings nur die Stufe 1 Gruppiert. Ich möchte alle (bis zu 9 Stufen)
![]() ![]() |
Betrifft: AW: Gruppieren
von: fcs
Geschrieben am: 31.10.2014 15:39:42
Hallo Stefan,
hier ein Makro das über mehrere Level eine Gruppierung durchführt.
Gruß
Franz
Sub Gliederung_erstelllen() 'Gliederung für Zeilen ab Zeile 2 erstellen basierend auf Level in Spalte A Dim wks As Worksheet Dim G_Max As Integer Dim intG As Integer, Zeile As Long, Zeile_L As Long Set wks = ActiveSheet With wks .Rows.ClearOutline Zeile_L = .Cells(.Rows.Count, 1).End(xlUp).Row 'Text-Zahlen im Level ggf. in Zahlen umwandeln .Range(.Cells(2, 1), .Cells(Zeile_L, 1)).NumberFormat = "General" For Zeile = 2 To Zeile_L If IsNumeric(.Cells(Zeile, 1).Text) Then .Cells(Zeile, 1).Value = CLng(.Cells(Zeile, 1).Text) End If Next 'max. Level ermitteln G_Max = Application.WorksheetFunction.Max(.Range(.Cells(2, 1), .Cells(Zeile_L, 1))) If G_Max > 8 Then G_Max = 8 'max. mögliche Stufe in Excel-Gliederung 'Gliederung einrichten With .Outline .AutomaticStyles = False .SummaryRow = xlAbove .SummaryColumn = xlLeft End With 'Zeilen gruppieren For intG = 1 To G_Max - 1 For Zeile = 2 To Zeile_L If .Cells(Zeile, 1).Value > intG Then .Rows(Zeile).Group End If Next Next End With End Sub
![]() ![]() |
Betrifft: AW: Gruppieren
von: Stef26
Geschrieben am: 31.10.2014 16:06:57
Hallo Franz,
super duper dankeschööön. So hatte ich mir das vorgestellt.
Hab aber leider vergessen zu sagen, dass die Stufen von 0 beginnen...
Ist das ein Problem ?
Liebe Grüße
Stefan
![]() ![]() |
Betrifft: AW: Gruppieren
von: fcs
Geschrieben am: 31.10.2014 16:50:00
Hallo Stefan,
wenn 0 der niedriegste Level ist, dann muss der Zählter für dir intG-Schleife bei 0 stattt 1 beginnen.
für G_max muss der max--Wert von 8 auf 7 geändert werden.
Gruß
Franz
![]() ![]() |
Betrifft: AW: Gruppieren
von: Stef26
Geschrieben am: 31.10.2014 23:51:34
Hallo Franz,
besten Dank für deine Unterstützung.
Funktioniert einfach klasse
Stefan
![]() |