Excel2010 - Spalten mittels Steuerelement (Makro) ein- und ausblenden - bezugnehmend auf Zellwert

Hallo zusammen,

vorab zur Info: Ich habe bereits ein paar Stunden gegoogelt, jedoch leider nichts passendes zu meinem Problem gefunden - ähnliches schon, aber …

Excel2010
Spalten mittels Steuerelement (Makro) ein- und ausblenden - bezugnehmend auf Zellwert

Tabelle mit 103 Spalten
Spaltenbeschriftung in Zeile 3 und 4

In Zeile 1 habe ich Spalten markiert „x“ die mittels Steuerelement 1 ausgeblendet werden sollen und mit Steuerelement 2 eingeblendet werden sollen.
Die Markierung „x“ in Zeile 1 kann sich verändern, wenn bei anderen Usern andere Spalten relevant sein sollten - Makro sollte daher den Wert der kompletten Zeile 1 berücksichtigen.

Habe es erst einmal auf die einfache Variante probiert mit Makro aufnehmen, jedoch bekomme ich so nur 2 fixe Funktionen, die eine spätere Änderung anzuzeigender Spalten nicht mehr zulässt ohne das Makro vorher umzuschreiben.

Hoffe ich habe mich verständlich gemacht, und freue mich auf eure Antworten.

Danke
Linga

Moin Linga75,

da habe ich ´was ganz Ähnliches für Dich. Unterschied ist, dass Du auch Zeilen markieren kannst zum Nicht-Ausblenden und dass es bei mir erst in Zeile 9 mit den Daten losgeht. Auch die ersten 3 Spalten sind frei von Daten.
Wenn Du Schwierigkeiten mit der Anpassung des/der Makros hast, melde Dich noch´mal. Ich muss gleich noch ´mal weg.
Freundliche Grüße
Thomas

Option Explicit
'Dim AR As Long: Dim AC As Long 'activecell.row + .column
Dim LR As Long: Dim LC As Long ‚ActiveCell.SpecialCells(xlLastCell).Row+ .column
Dim R1 As Integer: Dim C1 As Integer ‚1.DatenZeile und -Spalte
Dim R0 As Integer: Dim i As Long ’ R0=Zeile mit AusBlendMarkierungen‘
Dim C0 As Integer: ’ C0=Zeile mit AusBlendMarkierungen‘
Dim Modus As Boolean
Dim bolSperre As Variant

Sub selektiv_ausblenden()
R1 = 9 'Überschriften NUR OBERHALB Zeile 9!!!
C1 = 4 ‚Steuerungs-Spalten NUR VOR Spalte 4!!!
R0 = 7 ’ Markierung in Zeile 7 --> Spalte nicht ausblenden, ggf. anpassen
C0 = 2‘ Markierung in Spalte 2 --> Zeile nicht ausblenden, ggf. anpassen
LC = ActiveCell.SpecialCells(xlLastCell).Column
For i = C1 To LC
If Cells(R0, i) = „“ Then
Columns(i).EntireColumn.Hidden = True
End If
Next i
LR = ActiveCell.SpecialCells(xlLastCell).Row
For i = R1 To LR
If Cells(i, C0) = „“ Then
Rows(i).EntireRow.Hidden = True
End If
Next i
End Sub

Sub alle_ein()
’ Alle ausgeblendeten Spalten und Zeilen werden eingeblendet, alle Filter zurückgesetzt
Cells.EntireColumn.Hidden = False: Cells.EntireRow.Hidden = False
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
End Sub

Hallo Falken,

danke erstmal für die schnelle Antwort.
Da ich noch nicht ganz soviel Erfahrung mit Makros habe, wäre es toll mir ein paar
Erläuterungen zu geben.
Im Prinzip ist bei mir ja egal wo meine Spaltenbeschriftung ist, wieviel Spalten ich habe, etc. Entscheidend ist, dass alle Spalten, die in Zeile 1 mit einem „x“ gekennzeichnet sind,
mit Steuerelement 1 ausgeblendet und dann mit deinem 2. Makro:

Sub alle_ein()
’ Alle ausgeblendeten Spalten und Zeilen werden eingeblendet, alle Filter zurückgesetzt
Cells.EntireColumn.Hidden = False: Cells.EntireRow.Hidden = False
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
End Sub

… wieder eingeblendet werden.

Kann daher deinen Code nicht ganz verstehen, da du dich öfters auf bestimmte
Spalten und Zeilen festlegst. Wär nett wenn du es mir ein bisschen detaillierter erklären kannst,
damit ich evtl. Anpassungen eigenständig durchführen kann, möchte auch kapieren was ich da mache :smile:

1000 Dank
VG
Linga

Moin,

wenn Du flexibel mit Deinem Tabellenaufbau bist - um so besser :smile:
Es ist oft von Vorteil ein paar Zeilen mehr oben frei zu haben für Überschriften, Einheitenzeilen, Erklärungen, Schaltflächen usw.
Die freien Spalten links stören auch kaum. Du kannst sie ja ausblenden oder ganz schmal machen ( dann werden sie auch nicht immer wieder durch das 2. Makro aufgepoppt ).

Natürlich sind meine Umgrenzungen für den Datenbereich festgelegt sowie auch die Steuerzeile und -spalte mit den "x"en als Nicht-Ausblend-Markierung.
Das geschieht aber im Code durch Werte, die in Variablen geschrieben werden.
Hast Du Dir die vorhandenen Kommentare angesehen? Da ist schon eine Menge erklärt. Ich schreibe Dir aber noch ´was dazu:

Option Explicit
'Kann weg, brauchst Du nicht 'Dim AR As Long: Dim AC As Long 'activecell.row + .column
Dim LR As Long: Dim LC As Long ‚ActiveCell.SpecialCells(xlLastCell).Row+ .column
Dim R1 As Integer: Dim C1 As Integer ‚1.DatenZeile und -Spalte
Dim R0 As Integer: Dim i As Long ’ R0=Zeile mit AusBlendMarkierungen‘
Dim C0 As Integer: ’ C0=Zeile mit AusBlendMarkierungen‘
'Kann weg, brauchst Du nichtDim Modus As Boolean
'Kann weg, brauchst Du nicht Dim bolSperre As Variant

Sub selektiv_ausblenden()
R1 = 9 'Überschriften usw. NUR OBERHALB Zeile 9!!! hier ggf. anpassen!
C1 = 4 ‚Steuerungs-Spalten NUR VOR Spalte 4!!!hier ggf. anpassen!
R0 = 7 ’ Markierung in Zeile 7 --> Spalte nicht ausblenden, ggf. anpassen
C0 = 2‘ Markierung in Spalte 2 --> Zeile nicht ausblenden, ggf. anpassen
LC = ActiveCell.SpecialCells(xlLastCell).Column ’ letzte benutzte Spalte auf dem Blatt

For i = C1 To LC ’ durchläuft alle Spalten bis zur letzten benutzten Sp.
If Cells(R0, i) = „“ Then ’ wenn in der aktuellen Spalte die Markierungszelle leer ist…
Columns(i).EntireColumn.Hidden = True '… wird die Spalte ausgeblendet
End If
Next i

’ Die folgenden 6 Zeilen kannst Du weglassen, wenn Du nur Spalten ausblenden willst
’ LR = ActiveCell.SpecialCells(xlLastCell).Row
’ For i = R1 To LR ’ durchläuft alle Zeilen bis zur letzten benutzten Zeile
’ If Cells(i, C0) = „“ Then ’ wenn in der aktuellen Zeile die Markierungszelle leer ist…
’ Rows(i).EntireRow.Hidden = True '… wird die Zeile ausgeblendet
’ End If
’ Next i

End Sub

Sub alle_ein()
Cells.EntireColumn.Hidden = False: Cells.EntireRow.Hidden = False ’ Alle ausgeblendeten Spalten und Zeilen werden eingeblendet, alle Filter zurückgesetzt

If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData 'deaktiviert evtl. vorhandene Filter
End Sub

Beide Makros per Drag&drop in ein Standardmodul kopieren. Start durch Schaltfläche, Steuerelement oder Tastenkombi festlegen und testen :smile:
Am besten erst´mal den Code so lassen und nur das Blatt anpassen. Kannst Du später noch ändern.

Viel Erfolg

Thomas