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

Forumthread: Spalten nach Wert ein- und ausblenden

Spalten nach Wert ein- und ausblenden
31.01.2018 14:52:34
Wuselito
Hallo liebes Forum,
bin neu hier - arbeite viel mit Excel und formatiere auch gerne bedingt.
Aber mit der aktuellen Aufgabenstellung bin ich doch einigermaßen überfordert.
Habe das Forum hier gefunden und gesehen, dass hier reichlich Gurus unterwegs sind.
Vielleicht ist mein Problem für Euch 'ne Kleinigkeit.
Die Tabelle habe ich zur besseren Verständlichkeit hochgeladen.
Link: https://www.herber.de/bbs/user/119438.xlsx
Zur Aufgabe:
Im Tabellenblatt gibt es unterschiedliche Kategorien mit jeweils unterschiedlichen Zeilenanzahlen (insgesamt etwa 20 Varianten).
Kategorien sollen ein- und ausgeblendet werden können - dies geschieht über 0/1 Unterscheidung in Spalte "J", also z.B. Kategorie 1 ausblenden bei "J2"=0, einblenden bei "J2"=1 . Ich habe mir überlegt, dass es sinnvoll sein könnte in Spalte "K", also im obigen Beispiel "K2" die Zahl der nachfolgend betroffenen Zeilen abzulegen.
Das heißt:
Wenn "J2"=1 blende die nachfolgenden "K2"=15 Zeilen ein.
Wenn "J2"=0 blende die nachfolgenden "K2"=15 Zeilen aus.
In den Kategorien gibt es unterschiedliche Details.
Im Beispiel werden die vier Zeilen unter Kategorie 1/Detail 1 nie ausgeblendet, da "J3" nicht 0 oder 1 enthält. Die 3 Zeilen unter Kategorie 1/Detail 2 sollen aber bei "J8"=1 eingeblendet und bei 0 wieder ausgeblendet werden. Gleiches gilt für Kategorie 1/Detail 3.
Nehmen wir an Kategorie 1 ist eingeblendet (also die nachfolgenden x Zeilen aus Spalte "K"), Detail 2 ist ausgeblendet und Detail 3 ist eingeblendet.
Wenn ich nun Kategorie 1 aus- und wieder einblende, dann ist auch Detail 2 wieder eingeblendet.
Es muss also beim (wieder)einblenden geprüft werden, ob nachfolgende Details ausgeblendet werden müssen.
Mein Lösungsansatz wäre folgender:
Ich bilde über Spalte "J" eine Summe und merke sie mir. Wird nun eine Kategorie eingeblendet - also Zelle in Spalte "J"=1 ändert sich die Summe über Spalte "J".
In diesem Fall sollen alle Ein- und Ausblendungen aktualisiert werden, also Spalte "J" soll durchlaufen werden und bei 0 oder 1 die nachfolgende Ein- und Ausblendung kontrolliert werden.
So denkt einer der bisher nur bedingt formatiert hat.
Da in der Endausbaustufe bis zu 20 Kategorien gebraucht werden, die auch mehrfach auftreten können, frage ich Euch, ob das mit Excel zu machen ist und welchen Aufwand es bedeutet.
Will mich in Zukunft viel mehr mit VBA beschäftigen, tappe aber bei der Umsetzung meines Lösungsansatzes noch durch 'nen dunklen Tunnel.
Über jegliche Tipps und Tricks würde ich mich sehr freuen.
Gruß
Wusel
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
und einfach Gruppieren willst Du nicht ? oT
31.01.2018 15:54:27
Matthias
AW: und einfach Gruppieren willst Du nicht ? oT
31.01.2018 16:36:19
Wuselito
Hallo Mathias,
nein, gruppieren klappt nicht, weil beim reduzieren und wieder erweitern vorher reduzierte Details mit erweitert werden.
Gruß
Markus
P.S. natürlich ist der Betreff meiner ursprünglichen Nachricht falsch. Es geht um Zeilen, nicht um Spalten
was ist mit Zeile(18) ? owT
31.01.2018 16:48:55
Matthias
Anzeige
AW: was ist mit Zeile(18) ? owT
01.02.2018 08:50:56
Wuselito
Zeile (18) ist lediglich eine Leerzeile zwischen den Kategorien
Top-Antwort ... owT
01.02.2018 16:18:41
Matthias
Sorry, dann hsb ich zeile<(18) nicht kapiert oT
01.02.2018 17:58:37
Wuselito
Anzeige
Seh ich auch so ...
01.02.2018 19:55:30
Matthias
Hallo
Cod gehört in die Tabelle
Dann probier das als ersten Ansatz: (musst Du natürlich an Deine Bedürfnisse anpassen, statt der Box)

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 10 And Target  "" And Target.Offset(, 1)  "" Then
Select Case Target.Value
Case Is = 1
MsgBox Target.Offset(, 1) & " Zeilen ausblenden"
Case Is = 0
MsgBox Target.Offset(, 1) & " Zeilen wieder einblenden"
Case Else
MsgBox "nix machen"
End Select
End If
End Sub
Ich wollte wissen was mit Spalte(18) passieren soll.
Ist mir noch nicht ganz schlüssig.(Spalte(18) mit aus/einblenden) oder ignorieren.
Gruß Matthias
Anzeige
Lösung gefunden!
01.02.2018 23:58:56
Wuselito
Hallo Matthias,
du wolltest wissen, was mit Spalte(18) passieren soll, schreibst aber Zeile 18 - egal, ich war ja auch verwirrt genug im Titel des Beitrags zu schreiben "Spalten ausblenden" obwohl ich "Zeilen ausblenden" wollte.
Naja, danke für deinen Code - hab mich heute nun auch ein wenig damit beschäftigt und folgendes versucht:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim intRow1, intRow2, intRow3 As Integer
Dim rngJ As Range
Set rngJ = Range("J:J")
If Not Application.Intersect(rngJ, Range(Target.Address)) Is Nothing Then
'Zeilen bei "0" ausblenden
If Target.Value = "0" Then
If Cells(Target.Row + 1, 10).EntireRow.Hidden = False Then
For intRow = 1 To Cells(Target.Row, Target.Column + 1).Value
Rows(Target.Row + intRow).EntireRow.Hidden = True
Next intRow
End If
End If
'Zeilen bei "1" einblenden
If (Target.Value = "1" And Cells(Target.Row, 1).Value = "") Then
'MsgBox (Cells(Target.Row, 1).Value & "eins-leer")
If Cells(Target.Row + 1, 10).EntireRow.Hidden = True Then
For intRow = 1 To Cells(Target.Row, Target.Column + 1).Value
Rows(Target.Row + intRow).EntireRow.Hidden = False
Next intRow
End If
End If
'Kategorie bei "1" ueberarbeiten
If (Target.Value = "1" And Cells(Target.Row, 1).Value  "") Then
ScreenUpdating = False
'alle Zeilen einblenden
For intRow1 = 1 To Cells(Target.Row, Target.Column + 1).Value
Rows(Target.Row + intRow1).EntireRow.Hidden = False
Next intRow1
'Spalte "J" auf "0" prüfen
For intRow2 = 1 To Cells(Target.Row, Target.Column + 1).Value
If Cells(Target.Row + intRow2, 10).Value = "0" Then
If Cells(Target.Row + intRow2 + 1, 10).EntireRow.Hidden = False Then
'Zeilen ausblenden
For intRow3 = 1 To Cells(Target.Row + intRow2, Target.Column + 1).Value
Rows(Target.Row + intRow2 + intRow3).EntireRow.Hidden = True
Cells(15, "A").Value = intRow3
Next intRow3
End If
End If
Next intRow2
ScreenUpdating = True
End If
End If
End Sub
Das funktioniert zunächst - vielleicht ist das nicht sonderlich stilvoll aber es macht eigentlich genau das, was ich wollte. Bin schon einigermaßen stolz nach 3 Tagen VBA. Hast du vielleicht noch einen Tip oder würdest du die Lösung abnicken?
Dann kann ich zu Step2 gehen und ein UserForm erstellen, welches mir verschiedene Kategorien in unterschiedlicher Anzahl auf ein Tabellenblatt generiert.
Danke für Deine Mühe und Gruß
Markus
Anzeige
AW: Lösung mit Fehlern
02.02.2018 00:06:23
Wuselito
- intRow ist nicht dimensioniert
- ScreenUpdating muss ich mir wohl nochmal anlesen - kriege nen Absturz nachdem es nicht mehr Kommentar ist
...ist auch schon spät
läuft ...
02.02.2018 03:53:49
Matthias
Hallo
Ich meinte tatsächlich Zeile(18), wie im ersten Beitrag geschrieben
Für was hast Du eigentl.
Cells(15, "A").Value = intRow3

im Code stehen?
Bei mir stürzt Excel nicht ab. Läuft!
Nach 3 Tagen VBA, darfst Du auch stolz sein.
Kannst also mit Step2(UserForm) beginnen :-)
Gruß Matthias
Anzeige
AW: läuft ...
02.02.2018 10:43:28
Wuselito
Hi Matthias,
Cells(15, "A").Value = intRow3

habe ich vergessen zu löschen.
Hatte ich zu Testzwecken mal in der Tabelle angezeigt um zu sehen was passiert.
Manchmal musste ich das per Einzelschritt kontrollieren was der Code macht.
Gruß Markus
P.S. Deine Antwort hast du um ca. 4 Uhr geschrieben - bist wohl auch nachtaktiv so wie ich ;-)
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Spalten nach Wert ein- und ausblenden in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne deine Excel-Datei und gehe zu dem Tabellenblatt, in dem du die Spalten nach Wert ein- und ausblenden möchtest.
  2. Füge die erforderlichen Werte in Spalte "J" ein:
    • Setze "1" für einblenden und "0" für ausblenden.
  3. Bereite die Spalte "K" vor, um die Anzahl der betroffenen Zeilen festzulegen.
  4. Öffne den VBA-Editor:
    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  5. Erstelle ein neues Modul:
    • Klicke im Menü auf Einfügen > Modul.
  6. Füge den folgenden VBA-Code ein:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim intRow As Integer
    Dim rngJ As Range
    Set rngJ = Range("J:J")

    If Not Application.Intersect(rngJ, Target) Is Nothing Then
        If Target.Value = "0" Then
            For intRow = 1 To Cells(Target.Row, Target.Column + 1).Value
                Rows(Target.Row + intRow).EntireRow.Hidden = True
            Next intRow
        ElseIf Target.Value = "1" Then
            For intRow = 1 To Cells(Target.Row, Target.Column + 1).Value
                Rows(Target.Row + intRow).EntireRow.Hidden = False
            Next intRow
        End If
    End If
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Teste deine Eingaben in Spalte "J" und beobachte, wie die Zeilen entsprechend ein- oder ausgeblendet werden.

Häufige Fehler und Lösungen

  • Fehler: Die Zeilen blenden sich nicht korrekt ein oder aus.

    • Lösung: Überprüfe, ob die Werte in Spalte "J" korrekt eingegeben sind (0 oder 1). Achte auch darauf, dass die entsprechenden Zeilen in Spalte "K" die richtige Anzahl haben.
  • Fehler: Excel stürzt ab, wenn du den Code ausführst.

    • Lösung: Stelle sicher, dass ScreenUpdating korrekt gesetzt ist und keine endlosen Schleifen im Code auftreten.

Alternative Methoden

  1. Gruppierung nutzen: Du kannst die Daten auch gruppieren und collapsen, um sie ein- und auszublenden. Dies funktioniert jedoch nur bei statischen Daten.
  2. Filter verwenden: Setze Filter in der Tabelle, um nur die relevanten Daten anzuzeigen, anstatt Zeilen auszublenden.

Praktische Beispiele

  • Beispiel 1: Du hast eine Liste von Produkten und möchtest nur die aktiven Produkte anzeigen. Setze "1" für aktive und "0" für inaktive Produkte in der Spalte "J".
  • Beispiel 2: Du hast verschiedene Projektphasen und willst nur die aktuellen Phasen sichtbar machen. Verwende die gleiche Logik wie oben beschrieben.

Tipps für Profis

  • Nutze Named Ranges: Erstelle benannte Bereiche für deine Spalten, um den Code klarer und flexibler zu gestalten.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung im VBA-Code, um unerwartete Eingaben zu erkennen und entsprechend zu reagieren.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Spalten gleichzeitig ein- oder ausblenden?
Du kannst den Code entsprechend anpassen, indem du mehrere Spaltenreferenzen in den If-Bedingungen hinzufügst.

2. Muss ich VBA aktivieren, um diesen Code zu verwenden?
Ja, du musst sicherstellen, dass Makros in deiner Excel-Anwendung aktiviert sind, um den VBA-Code auszuführen.

3. Welche Excel-Version benötige ich?
Dieser Code sollte in Excel 2010 und neueren Versionen funktionieren. Achte darauf, dass die Makros aktiviert sind.

4. Was mache ich, wenn ich keine VBA-Programmierung möchte?
Wenn du keine VBA-Programmierung nutzen willst, kannst du auch die Filterfunktion in Excel verwenden, um Inhalte auszublenden.

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