Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1344to1348
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 per Makro

Gruppierung per Makro
08.01.2014 11:22:50
Stefan
Hallo VBA Profis,
ich bräuchte bitte Eure Hilfe.
Wenn ich mir aus SAP eine Kostenartenstruktur in Excel ziehe und diese danach noch anpasse, zerhaut es die Gliederung.
Die Stufen der Kostenartenstruktur sind durch * gegennzeichnet.
Beispiel:
* Kostenerstattungen
** Sonstige Umsatzerlöse
*** Umsatzerlöse
**** Gesamtleistung
****** Jahresergebnis
Ich hatte mir so beholfen, dass ich mehrere Hilfsspalten eingebaut habe.
Erst habe ich mit folgender Formel die Anzahl der * ermittelt.
Spalte G =LÄNGE(H2)-LÄNGE(WECHSELN(H2;"*";))
dann
Spalte F ==WENN($G1>=1;$G1;0)
Spalte E ==WENN($G1>=2;$G1;0)
etc.
Danach die Formeln in Werte umgewandelt und alle mit Wert Null gelöscht.
Danach habe ich folgendes Makro laufen lassen.

Sub Gruppieren5a()
Dim rng As Range
For Each rng In Columns(5).SpecialCells(xlCellTypeBlanks).Areas
rng.EntireRow.Group
Next
ActiveSheet.Outline.ShowLevels RowLevels:=1
Call Gruppieren4a  (Das Gkleiche für Spalte 4)
Call Gruppieren3
Call Gruppieren2
Call Gruppieren1
End Sub

Ich finde dies jedoch sehr umständlich und bin mir sicher, dass dies alles in einem Makro gemacht werden kann.
Vorab schon einmal vielen Dank für Eure Hilfe
VG
Stefan

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Gruppierung per Makro
09.01.2014 22:05:22
fcs
Hallo Stefan,
hier ein Makro, das die Zeilen ohne Hilfsspalten gruppiert.
Gruß
Franz
'Code in einem allgemeinen Modul
Sub Gruppieren()
Dim wks As Worksheet
Dim Zeile As Long, Zeile1 As Long, Zeile2 As Long, Zeile_L As Long
Dim arrLevel() As Long
Dim GroupMax As Long, Group As Long
Const SpalteGroup As Long = 8 'Spalte mit * zur Gruppierungskennzeichnung - ggf. anpassen
Const Zeile_S As Long = 2     'Startzeile für die Gruppierung             - ggf. anpassen
Set wks = ActiveWorkbook.Worksheets("Tabelle1") ' oder = ActiveSheet      - ggf. anpassen
With wks
.Activate
'letzte zeile in Gruppierungsspalte
Zeile_L = .Cells(.Rows.Count, SpalteGroup).End(xlUp).Row
'vorhandene Gliederung entfernen
With .Range(.Rows(Zeile_S), .Rows(Zeile_L))
.ClearOutline
End With
'Gruppierungsebene für jede Zeile ermitteln und in Daten-Array speichern
ReDim arrLevel(Zeile_S To Zeile_L)
For Zeile = Zeile_S To Zeile_L
arrLevel(Zeile) = Len(.Cells(Zeile, SpalteGroup)) _
- Len(VBA.Replace(.Cells(Zeile, SpalteGroup), "*", ""))
If GroupMax 

Anzeige
AW: Gruppierung per Makro
10.01.2014 09:29:09
Stefan
Hallo Franz,
super !!! Vielen, vielen Dank !
Es funktioniert genau wie ich es wollte.
Viele Grüße
Stefan

AW: Gruppierung per Makro
10.01.2014 11:03:43
Stefan
Hallo Franz,
eine Kleinigkeit hätte ich doch noch,
Die Überschrift in Zeile eins bleibt trotz
Const Zeile_S As Long = 2 nicht stehen.
Und die Gliederung fängt erst ab ** an.
Aber ansonsten echt super.
Hast du noch einen Tip ?
Danke
VG
Stefan

AW: Gruppierung per Makro
10.01.2014 12:25:08
fcs
Hallo stefn,
wenn auch Zeilen ohne Stren vorkommen, die dann in unterste Gruppierung sollen, dann folgende Zeile anpasen:
    For Group = GroupMax To 1 Step -1

Ich hab aber keine Ahnung, warum es mit der Zeile oberhalb der vorgegeben Startzeile Probleme gibt.
Gruß
Franz

Anzeige
AW: Gruppierung per Makro
10.01.2014 12:48:32
Stefan
Hallo Franz,
super ! Funktioniert jetzt beides.
Vielen Dank
Gruß
Stefan

AW: Gruppierung per Makro
13.01.2014 13:36:11
Stefan
Hallo Franz,
jetzt stoße ich auf das nächste Problem und hoffe, dass du mir auch hier weiterhelfen kannst.
Excel kann anscheinend nur 8 Gruppierungsebenen abbilden.
Jetzt habe ich bei meiner Kostenartengruppe aber auch mehr als 7 Sternchen.
Was müsste ich machen, damit alle Felder, welche mehr als 7 Sternchen haben automatisch auf 7 gekürzt werden?
Ich hatte es mit suchen/ersetzen probiert ~********.
Hier zeigt er mir jedoch alle mit Sternchen an und ich müsste in den Optionen händisch markieren.
Vielen Dank und viele Grüße
Stefan

Anzeige
AW: Gruppierung per Makro
13.01.2014 15:05:58
fcs
Hallo Stefan,
suchen ersetzen ist hier etwas schwierig.
Du müsstes hier in mehreren Durchläufen 10, 9 und 8 Sternchen durch 7 Sternchen ersetzen.
Dabei muss im Suchtext vor jedem Stern ein ~ stehen
z.B. ~*~*~*~*~*~*~*~*~*~*
Das Makro kann man einfach an max. 8 Gliederungsstufen anpassen ohne die mehr als 7 Sternchen zu ersetzen.
Füge im folgenden Abschnitt Makros die zusätzliche Zeile ein, die den Max-Level auf 7 begrenzt.
    'Gruppierungsebene für jede Zeile ermitteln und in Daten-Array speichern
ReDim arrLevel(Zeile_S To Zeile_L)
For Zeile = Zeile_S To Zeile_L
arrLevel(Zeile) = Len(.Cells(Zeile, SpalteGroup)) _
- Len(VBA.Replace(.Cells(Zeile, SpalteGroup), "*", ""))
If arrLevel(Zeile) > 7 Then arrLevel(Zeile) = 7             'neue Zeile
If GroupMax 

Gruß
Franz

Anzeige
AW: Gruppierung per Makro
13.01.2014 15:17:56
Stefan
Hallo Franz,
du bist Spitze !!
Das funktioniert einwandfrei.
Vielen Dank !
VG
Stefan

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige