Microsoft Excel

Herbers Excel/VBA-Archiv

Hilfe zu Makro-Gruppieren


Betrifft: Hilfe zu Makro-Gruppieren von: Ursel
Geschrieben am: 21.01.2019 10:31:09

Hallo!
Ich benötige bitte Hilfe zu einem Makro.
Habe eine Liste mit zahlreichen Daten (ca. 1500 Zeilen) uns verschiedenen Indizes.
1
1.1
1.1.1
1.1.2
1.1.3
1.1.4
1.1.5
1.1.6
1.1.7
1.1.8
1.2
1.2.1
1.2.2
1.2.3
1.2.4
1.2.5
1.2.6
1.2.7
1.2.11
1.2.12
1.3
1.3.1
1.3.2
1.3.3
1.3.4
1.3.5
1.3.6
1.3.7


25
25.1
25.1.1.
usw.

Der Index steht jeweils in Zelle C10, in Zelle B10 habe ich eine Formel:
=TEXT("00"&C10;"000") - diese dient weiterführend für nachstehendes Makro zum Erstellen von automatischen Gruppierungen.
Es erstellt aufgrund von Textlängen Untergruppen (3 Ebenen: 1, 1.1, 1.1.1 usw., Blatt ist vorher schreibgeschützt und soll es nachher auch wieder sein):

Sub Makro_Gruppieren() 'Makro für automatische Gruppierung
'
  ActiveSheet.Unprotect
'
Columns("B:B").Select
    Selection.Copy
    Columns("A:A").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
'
    Columns("A:A").Select
    Selection.ClearOutline
'
    Range("A10").Select
'
Dim Zelle As Range

For Each Zelle In Columns(1).SpecialCells(xlCellTypeConstants)
    If Len(Zelle.Value) >= 5 Then Zelle.EntireRow.Group
Next
For Each Zelle In Columns(1).SpecialCells(xlCellTypeConstants)
    If Len(Zelle.Value) >= 7 Then Zelle.EntireRow.Group
Next

ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
        False, AllowFiltering:=True
End Sub
Mein Problem ist nun, dass immer die letzte Untergruppe der Ebene 3 (zB 1.1.8, 1.2.12, 1.3.7) nicht gruppiert wird. und wenn ich zusätzlich eingebe:
For Each Zelle In Columns(1).SpecialCells(xlCellTypeConstants)
If Len(Zelle.Value) <=3 Then Zelle.EntireRow.Group
Next

dann sind zwar die Untergruppen korrekt, ich kann aber nicht mehr in Ebene 1 gliedern (nur Ebene 2 und 3).

Kann mir jemand helfen?
Gerne schicke ich auch eine Probe-Datei, wo man das Vorgehen sieht.

DANKE schon im Voraus!!!!

Gruß Ursel

  

Betrifft: AW: Hilfe zu Makro-Gruppieren von: Daniel
Geschrieben am: 21.01.2019 10:48:22

Hi

wenn du zuverlässig ermitteln willst, wieviele Gruppierungsschritte in jeder Zeile durchzuführen sind, solltest du nicht die Länge der Zeichenkette verwenden, denn diese ist ja variabel und ändert sich auch damit, ob die GruppenIndizes jetzt ein- oder zweistellig sind und nicht nur über die Ebne

ich würde die Anzahl der Punkte in der Zelle verwenden, damit kannst du die jeweilige Ebene eindeutig bestimmen:
- kein Punkt: Ebene 1
- ein Punkt: Ebne 2
- zwei Punkte: Ebene 3

die Anzahl der Punkte kannst du mit dieser Formel ermitteln:

=Len(Zelle) - Len(Replace(Zelle, ".", ""))

Gruß Daniel


  

Betrifft: AW: Hilfe zu Makro-Gruppieren von: Ursel
Geschrieben am: 21.01.2019 11:32:36

Hallo, danke für die Antwort.
Hab's natürlich nicht gecheckt.
Mein Index steht jetzt in Zelle B10 (der erste).
Ich mach aber was falsch:

Sub Makro_Gruppieren() 'Makro f?r automatische Gruppierung
'
  ActiveSheet.Unprotect
'
    Range("b10").Select
'
Dim Zelle As Range

For Each Zelle In Columns(1).SpecialCells(xlCellTypeConstants)
   If Len(Zelle) - Len(Replace(Zelle, ".", "")) = 1 Then Zelle.EntireRow.Group
   Next
   For Each Zelle In Columns(1).SpecialCells(xlCellTypeConstants)
   If Len(Zelle) - Len(Replace(Zelle, ".", "")) = 2 Then Zelle.EntireRow.Group
   Next
   For Each Zelle In Columns(1).SpecialCells(xlCellTypeConstants)
   If Len(Zelle) - Len(Replace(Zelle, ".", "")) = 3 Then Zelle.EntireRow.Group
   Next


ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
        False, AllowFiltering:=True
End Sub
Für Hilfe wäre ich dankbar und entschuldige mich zum wiederholten Mal für das Crossposting, das Ergebnis werde ich dann in alle Foren stellen.

Ursel


  

Betrifft: AW: Hilfe zu Makro-Gruppieren von: Daniel
Geschrieben am: 21.01.2019 11:57:53

naja, hier wird jede Zeile immer nur einmal gruppiert.
die Zeilen der Ebene 3 müssen aber 3x gruppiert werden.
schau dir dein altes Makro, in welchem du die Längen für die Prüfung verwendet hast, nochmal genau an.
vielleicht fällt dir ja ein Unterschied auf.
Gruß Daniel


  

Betrifft: AW: Hilfe zu Makro-Gruppieren von: Ursel
Geschrieben am: 21.01.2019 12:26:36

Hallo Daniel,

danke für Deine wiederholte Antwort.
Ich finde den Fehler leider selbst nicht.
Mir wäre sehr geholfen, wenn Du als "Profi" mir den Code schicken könntest, der funktioniert, falls das nicht zu viel verlangt ist. Bin nicht so versiert im Umgang mit VBA.
Falls Du mir helfen kannst und willst, hier noch die Testdatei:
https://www.herber.de/bbs/user/126965.zip

Danke, Ursel


  

Betrifft: AW: Hilfe zu Makro-Gruppieren von: Daniel
Geschrieben am: 21.01.2019 12:48:56

das ist dein alter Code. Ich habe das relevante mal unterstrichen.

   For Each Zelle In Columns(1).SpecialCells(xlCellTypeConstants)
       If Len(Zelle.Value) >= 5 Then Zelle.EntireRow.Group
   Next
   For Each Zelle In Columns(1).SpecialCells(xlCellTypeConstants)
       If Len(Zelle.Value) >= 7 Then Zelle.EntireRow.Group
   Next
damit sorgst du dafür, dass alle Zeilen mit 7 oder mehr Zeichen 2x gruppiert werden, nämlich einmal in der ersten Schleife und das zweite mal in der zweiten Schleife.
genauso musst du vorgehen, wenn du nicht die Zeichenlänge, sondern die Anzahl der Punkte verwendest.

Gruß Daniel


  

Betrifft: Crossposting von: SF
Geschrieben am: 21.01.2019 11:03:58

https://www.ms-office-forum.net/forum/showthread.php?t=357304
http://office-loesung.de/p/viewtopic.php?f=166&t=793768