Microsoft Excel

Herbers Excel/VBA-Archiv

Gruppieren

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 Sub
Hier wird allerdings nur die Stufe 1 Gruppiert. Ich möchte alle (bis zu 9 Stufen)
Gruppieren lassen, damit ich die Struktur besser überblicken kann.

Liebe Grüße
Stefan

  

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