Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1724to1728
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Gruppierung anders als geplant

Gruppierung anders als geplant
26.11.2019 12:30:02
ManWheel
Hallo in die Runde,
ich führe via VBA mehrere Gruppierungen durch. Hier zunächst ein Beispiel, bei dem die angegebenen Zahlen einer jeweiligen Ebene entsprechen. Die Zahlen stehen alle in untereinander einer Spalte. Die Punkte sind hier nur zu Anschauungszwecken beigefügt.
1
...2
...2
......3
......3
...2
......3
...2
Die Idee hinter dem Code ist, dass ich zunächst alle aufeinander folgenden 3er-Ebenen gruppiere sowie ausblende, um dann im Anschluss die 2er-Ebene zu einer Gruppe zusammenfasse.
Das oben angegebene Beispiel funktioniert tadellos. Lässt man jedoch die letzte 2er-Ebene weg, entsteht ein (wie ich finde) spannendes Phänomen:
Veränderter Versuchsaufbau:
1
...2
...2
......3
......3
...2
......3
a) Zunächst werden die direkt untereinander stehenden 3er-Ebenen gruppiert. (Vollkommen Korrekt):
1
...2
...2(+)
...2
......3
b) Als nächstes wird die unterste 3er-Ebene gruppiert. (Vollkommen Korrekt):
1
...2
...2(+)
...2(+)
c) Nun sollen die drei 2er-Ebenen separat zu einer dritten Gruppe verbunden werden. Stattdessen wird aber die letzte Gruppierung der 3er-Ebene lediglich verlängert! Sodass ich nach wie vor zwei Gruppen habe. Öffne ich die erste Gruppe, so wird folgendes angezeigt:
1(-)
...2
...2(+)
...2
......3
Es sollte jedoch eine dritte Gruppe geöffnet werden, sodass sich folgendes Bild ergibt:
1(-)
...2
...2(+)
...2(+)
Es stellen sich also die beiden Fragen:
Warum verbindet/erweitert "er" die Gruppe, anstatt eine neue zu bilden?
und
Wie kann man dieses automatische Verbinden unterbinden?

Schon mal vorweg vielen Dank für's miträtseln! =)

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Gruppierung anders als geplant
27.11.2019 12:45:49
fcs
Hallo ManWheel,
da du dein Makro a nicht mit gepostet hast rätsel wir auch.
Im Pirinzip funktionieren die folgenden beiden Makros.
LG
Franz
Sub Gliederung_1()
Dim wks As Worksheet
Dim Zeile As Long
Dim iEbene_Max As Integer, iEbene As Integer, iEbeneZeile As Integer
Set wks = ActiveSheet
iEbene_Max = 3
With wks
.Rows.ClearOutline
For iEbene = iEbene_Max To 2 Step -1
For Zeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
'Ebene Ermitteln und vergleichen
iEbeneZeile = .Cells(Zeile, 2).Value
If iEbeneZeile >= iEbene Then
.Rows(Zeile).EntireRow.Group
End If
Next
Next
End With
End Sub
Sub Gliederung_2()
Dim wks As Worksheet
Dim Zeile As Long
Dim iEbene_Max As Integer, iEbene As Integer, iEbeneZeile As Integer
Set wks = ActiveSheet
iEbene_Max = 3
With wks
.Rows.ClearOutline
For iEbene = 1 To iEbene_Max - 1
For Zeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
'Ebene Ermitteln und vergleichen
iEbeneZeile = .Cells(Zeile, 2).Value
If iEbeneZeile > iEbene Then
.Rows(Zeile).EntireRow.Group
End If

Anzeige
AW: Gruppierung anders als geplant
29.11.2019 10:15:28
ManWheel
Hallo Franz,
vielen Dank für Deine Nachricht. Ich habe mit den beiden Codes etwas "rumgespielt" und konnte meinen Denkfehler lösen.
Dein Quellcode geht für jede Ebene, durch jede Zeile. Ist die Ebene in der Zeile größer als die aktuelle "Schleifen-Ebene", dann wird die aktuelle Zeile gruppiert (und mit benachbarten Gruppen, gleicher Ebene zusammengesetzt, bzw. eingerückt.
Genial einfach! :)
Meine Denke war deutlich komplizierter und hat immer die vorherige und nächste Zeile verglichen, Start- und Endwerte gesetzt und dann im Ganzen gruppiert:

Sub Gruppieren()
Dim iEbene,iEbene_Max As Long
Dim Startwert, Endwert As Long
Startwert = 2
Endwert = 2
With Tabelle3
For iEbene_Max = 3 To 1 Step -1
For iEbene = 2 To .UsedRange.Rows.Count      'Von Zeile 2 bis Ende des genutzten Bereichs
If .Rows(iEbene).Hidden = False Then     'Wenn die Zeile noch nicht verborgen ist
If .Cells(iEbene, 4) = iEbene_Max _  '->Ebenennr. steht in Spalte 4
And .Cells(iEbene - 1, 4)  iEbene_Max_   'Zeile davor anders
And .Rows(iEbene - 1).Hidden = False Then Startwert = iEbene
'Zeile davor noch nicht versteckt
'dann ist dies der neue Startwert
If .Cells(iEbene, 4) = iEbene_Max _
And .Cells(iEbene + 1, 4)  iEbene_Max_
And .Rows(iEbene + 1).Hidden = False Then
Endwert = iEbene
Range("A" & Startwert & ":A" & Endwert).Select
'Zeilen markieren von Startwert bis Endwert
Selection.Rows.Group
'Gruppieren der markierten Zeile
Selection.Rows.Hidden = True
'Markiertes verbergen
Else
If .Rows(iEbene + 1).Hidden Then
For x = iEbene + 1 To .UsedRange.Rows.Count
If .Rows(x).Hidden = False Then
If .Cells(x, 4) = iEbene_Max Then Exit For
If .Cells(x, 4) 
Hat so leider nur funktioniert, solange die (siehe Beispiel) letzte "Ebene 2" vorhanden war.
Nochmals vielen Dank für deine Hilfe! Richtig gut!
PS: Ich klatsche jetzt noch ein Makro zum schließen aller Gruppen dahinter und dann habe ich genau was ich brauche. =)
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige