Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Gliederung per VBA

Forumthread: Gliederung per VBA

Gliederung per VBA
Lorenz
Hallo,
ich versuche mich jetzt schon seit einiger Zeit in meine Tabelle eine Gliederung einzubauen, ohne großen Erfolg.
Genauer gesagt, soll automatisch (per VBA) eine Gliederung von Zelle A2 bis Ende Spalte A erfolgen.
Die "Überschriften" in dieser Gliederung sind in Spalte A mit roter Schrift und Fettdruck. Und genau dran scheitere ich.
Bernd Held gliedert in seinem Buch leider nach dem Kriterium vierstellige Zahl. Ich kriege es nicht auf meine Anforderungn umgeschrieben.
Wer kennt sich damit aus?
Gruß
Lorenz Peters
Sub GruppierungErstellen()
Dim s_Beginn As String
Dim s_Ende As String
Sheets("Tabelle11").Activate
Range("A2").Select
Do Until ActiveCell.Value = ""
ActiveCell.Offset(1, 0).Select
s_Beginn = ActiveCell.Address
Do Until Len(ActiveCell.Value) = 4 Or ActiveCell.Value = ""
ActiveCell.Offset(1, 0).Select
Loop
s_Ende = ActiveCell.Offset(-1, 0).Address
Range(s_Beginn, s_Ende).Rows.Group
Range(s_Ende).Offset(1, 0).Select
Loop
End Sub

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Gliederung per VBA
19.06.2011 15:22:09
Nepumuk
Hallo,
ein Buch vom Helden? Kein Wunder !!! Ich persönlich warne immer wieder davor, aber wer nicht hören will muss fühlen. :-)
Public Sub GruppierungErstellen()
    With Tabelle1
        .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)).EntireRow.Group
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Gliederung per VBA
19.06.2011 19:08:57
Lorenz
Hallo Nepumuk,
ich versuche es ja zu lernen.
Dein Makro funktioniert aber nicht so ganz, vermutlich liegt es an meiner BEschreibung.
Also ich möchte von Zeile 2 bis Ende gliedern. Und das entsprechende Kriterium sind die Zelleinträge in Spalte A. Die Zellen mit Fettdruck und roter Schrift sollen Überschriften sein.
Beispiel:
A2 Test (Fettdruck rot)
A3 - geliedert
A4 - geliedert
A5 - geliedert
A6 - geliedert
A7 Test (Fettdruck rot)
A8 - geliedert
A9 - geliedert
usw.
Vielen Dank!
Welchen Autor oder Buch schlägst Du vor?
Vieel Grüße
Lorenz Peters
Anzeige
AW: Gliederung per VBA
19.06.2011 19:30:28
Josef

Hallo Lorenz,
so?
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************
Option Explicit
Sub gliederung()
  Dim lngStart As Long, lngRow As Long, lngEnd As Long, lngLast As Long
  lngLast = Cells(Rows.Count, 1).End(xlUp).Row
  For lngRow = 2 To lngLast
    If Cells(lngRow, 1).Font.Bold And Cells(lngRow, 1).Font.ColorIndex = 3 Then
      lngStart = lngRow + 1
      For lngEnd = lngStart To lngLast + 1
        If (Cells(lngEnd, 1).Font.Bold And Cells(lngEnd, 1).Font.ColorIndex = 3) Or lngEnd > lngLast Then
          Range(Cells(lngStart, 1), Cells(lngEnd - 1, 1)).EntireRow.Group
          Exit For
        End If
      Next
    End If
  Next
End Sub



« Gruß Sepp »

Anzeige
AW: Gliederung per VBA
19.06.2011 19:49:55
Lorenz
Hallo Sepp,
ja genau so wollte ich es. Jetzt habe ich nur noch eine Frage.
Über welchen Zusatz kann ich bestimmen, ob alle Details ein- oder ausgeblendet sind (sprich: nur die Überschriften oder Überschriften und Unterpunkte)?
AW: Gliederung per VBA
19.06.2011 20:00:12
Josef

Hallo Lorenz,
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************
Option Explicit
Sub gliederung()
  Dim lngStart As Long, lngRow As Long, lngEnd As Long, lngLast As Long
  lngLast = Cells(Rows.Count, 1).End(xlUp).Row
  ActiveSheet.Rows.ClearOutline
  For lngRow = 2 To lngLast
    If Cells(lngRow, 1).Font.Bold And Cells(lngRow, 1).Font.ColorIndex = 3 Then
      lngStart = lngRow + 1
      For lngEnd = lngStart To lngLast + 1
        If (Cells(lngEnd, 1).Font.Bold And Cells(lngEnd, 1).Font.ColorIndex = 3) Or lngEnd > lngLast Then
          Range(Cells(lngStart, 1), Cells(lngEnd - 1, 1)).EntireRow.Group
          Exit For
        End If
      Next
    End If
  Next
  ActiveSheet.Outline.ShowLevels RowLevels:=1 '1 = Eingeklappt,, 2 = Ausgeklappt!
End Sub



« Gruß Sepp »

Anzeige
AW: Gliederung per VBA
19.06.2011 19:55:33
Nepumuk
Hallo,
achso, ja dann:
Musste allerdings ein bisschen tricksen, den das Suchen nach Formaten per VBA läuft nur von der ersten Übereinstimmung bis zur letzten richtig. Danach findet die Methode alles Mögliche, nur nicht das richtige.
Public Sub GruppierungErstellen()
    
    Dim objStartCell As Range, objEndCell As Range
    Dim strStopAddress As String
    
    With Application.FindFormat.Font
        .FontStyle = "Fett"
        .ColorIndex = 3
    End With
    
    With Tabelle1
        
        Set objStartCell = .Cells.Find(What:="*", After:=.Cells(.Rows.Count, 1), _
            LookIn:=xlFormulas, LookAt:=xlPart, SearchDirection:=xlPrevious, _
            MatchCase:=False, SearchFormat:=True)
        
        If Not objStartCell Is Nothing Then
            
            Set objEndCell = .Cells(.Rows.Count, 1).End(xlUp)
            strStopAddress = objEndCell.Address
            
            Do
                
                .Range(objStartCell.Offset(1), objEndCell).EntireRow.Group
                Set objEndCell = objStartCell.Offset(-1)
                Set objStartCell = .Cells.FindPrevious(After:=objEndCell)
                
            Loop Until strStopAddress = objStartCell.Address
        End If
    End With
    
    Set objEndCell = Nothing
    Set objStartCell = Nothing
    
End Sub

Also Autor kann ich keinen speziell empfehlen, ich hab kein Buch über VBA. Aber ich würde mal sagen, alle anderen außer dem.
Gruß
Nepumuk
Anzeige
Danke Euch beiden für die Hilfe!
19.06.2011 20:22:10
Lorenz
;
Anzeige

Infobox / Tutorial

Gliederung in Excel per VBA erstellen


Schritt-für-Schritt-Anleitung

Um eine Gliederung in Excel per VBA zu erstellen, kannst Du folgendes Makro verwenden. Es überprüft die Formatierung der Zellen in Spalte A und gruppiert die Zeilen basierend auf den Überschriften (Fettdruck und rote Schrift).

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Füge ein neues Modul hinzu: Rechtsklick auf "Diese Arbeitsmappe" > Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:
Sub gliederung()
    Dim lngStart As Long, lngRow As Long, lngEnd As Long, lngLast As Long
    lngLast = Cells(Rows.Count, 1).End(xlUp).Row
    ActiveSheet.Rows.ClearOutline
    For lngRow = 2 To lngLast
        If Cells(lngRow, 1).Font.Bold And Cells(lngRow, 1).Font.ColorIndex = 3 Then
            lngStart = lngRow + 1
            For lngEnd = lngStart To lngLast + 1
                If (Cells(lngEnd, 1).Font.Bold And Cells(lngEnd, 1).Font.ColorIndex = 3) Or lngEnd > lngLast Then
                    Range(Cells(lngStart, 1), Cells(lngEnd - 1, 1)).EntireRow.Group
                    Exit For
                End If
            Next
        End If
    Next
    ActiveSheet.Outline.ShowLevels RowLevels:=1 '1 = Eingeklappt, 2 = Ausgeklappt!
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Führe das Makro aus: ALT + F8, wähle gliederung und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: Das Makro funktioniert nicht wie gewünscht.

    • Lösung: Stelle sicher, dass die Zellen in Spalte A korrekt formatiert sind (Fettdruck und rote Schrift). Überprüfe auch, ob Du die richtige Tabelle aktiv hast.
  • Fehler: Gliederung wird nicht korrekt angezeigt.

    • Lösung: Achte darauf, dass die Zellen, die Du als Überschrift verwendest, tatsächlich die richtigen Formatierungen haben.

Alternative Methoden

Falls Du eine Gliederung ohne VBA erstellen möchtest, kannst Du die integrierten Funktionen von Excel verwenden:

  1. Markiere die Zeilen, die Du gliedern möchtest.
  2. Gehe zu "Daten" > "Gliederung" und wähle "Gruppieren".
  3. Du kannst auch die Gliederungsfunktion in der Gruppenregisterkarte verwenden.

Praktische Beispiele

Angenommen, Du hast folgende Daten in Spalte A:

  • A2: Test 1 (Fettdruck rot)
  • A3: - Unterpunkt 1
  • A4: - Unterpunkt 2
  • A5: Test 2 (Fettdruck rot)
  • A6: - Unterpunkt 1

Nach Ausführen des Makros wird die Gliederung automatisch erstellt. Du kannst die Details durch Klicken auf das Plus- oder Minuszeichen an der linken Seite der Zeilenansicht ein- oder ausblenden.


Tipps für Profis

  • Verwende benutzerdefinierte Formatierungen, um weitere Kriterien für die Gliederung festzulegen.
  • Experimentiere mit der ShowLevels-Methode, um verschiedene Ansichten der Gliederung zu steuern.
  • Halte Deinen Code gut kommentiert, um später Anpassungen einfacher vorzunehmen.

FAQ: Häufige Fragen

1. Kann ich das Skript anpassen, um weitere Formatierungen zu berücksichtigen? Ja, Du kannst das Skript anpassen, um auch andere Schriftarten oder Farben zu berücksichtigen, indem Du die entsprechenden Bedingungen im Code änderst.

2. Welche Excel-Version benötige ich für dieses VBA-Skript? Das Skript sollte in allen modernen Excel-Versionen (Excel 2010 und neuer) funktionieren. Achte darauf, dass die Makros aktiviert sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige