Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
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

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
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
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
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

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen