![]() |
Betrifft: Spalten ausblenden, wenn Leer
von: Björn
Geschrieben am: 06.11.2014 14:01:18
Guten Tag,
Ich habe eine Tabelle mit mehreren Filtern. Wenn ich diese Kriterien gesetzt habe, möchte ich, dass ein anderer Bereich geprüft wird. Zellen die zu diesen Kriterien keinen Eintrag haben, sollen ausgeblendet werden. Also die ganze zugehörige Spalte um das Ergebnis sofort zu sehen und nicht navigieren zu müssen. Die Beispielliste sollte es verdeutlichen. Wenn ich nach Sprachen und Französisch filter, möchte ich auf eine Schaltfläche klicken, damit die Personen ohne diese Kenntnisse ausgeblendet werden. Idealerweise werden diese bei einem weiteren Klick wieder eingeblendet. Ich komme dort nicht weiter. Vielleicht weiß jemaand etwas.
https://www.herber.de/bbs/user/93597.xlsm
Vielen Dank.
Grüße,
Björn
![]() ![]() |
Betrifft: AW: Spalten ausblenden, wenn Leer
von: fcs
Geschrieben am: 06.11.2014 17:13:55
Hallo Björn,
warum ordnest du deine Daten nicht als Liste an (Daten mit Personennamen und Xen transponieren (um 90 drehen))?
Die Spaltentitel mit den Fähigkeiten obendrüber und du kannst die Filter in den Spalten direkt setzen ohne den Umweg über einen Auswahlbereich und anschließende Bearbeitung der Spalten per Makro.
Gruß
Franz
![]() ![]() |
Betrifft: AW: Spalten ausblenden, wenn Leer
von: Björn
Geschrieben am: 07.11.2014 07:24:31
Guten Morgen Franz,
bei der Menge an Daten wäre das Navigieren noch aufwendiger. Dies war ja nur die Beispieltabelle mit zwei Filtern. Im Original sind es sechs Filter und diese gehen über 2000 Zeilen runter.
Außer man könnte horizontal Filtern (Spalten filtern). Dann filtert man meinetwegen nach Sprache - Französisch und in Spalte Französisch dann nach "x". Habe dazu allerdings nichts brauchbares gefunden. Immer nur Notlösungen und dann gefällt mir ein Makro doch wesentlich besser.
Aber danke für die Idee.
Grüße,
Björn
![]() ![]() |
Betrifft: AW: Spalten ausblenden, wenn Leer
von: fcs
Geschrieben am: 07.11.2014 15:57:57
Hallo Björn,
hier ein Makro, das die Spalten ausblendet, in denen unter der Person leere Zellen sichtbar sind.
Alle Daten des Filterbreichs werden in ein Datenarray geladen. Ebenso die Nummern der sichtbaren Zeilen des Filterbereichs.
Anschließend werden die Spalteninhalte auf "" kommt in einer Spalte eine leere Zelle vor, wird die Spalte ausgeblendet.
Gruß
Franz
Sub Test2() 'Spalten ausblenden Dim Zeile As Long, Zeile1 As Long, Zeile2 As Long, Spalte As Long, StatusCalc As Long Dim wks As Worksheet Dim arrData, arrVisible() As Long, bolHide As Boolean, intVisible As Integer Set wks = ActiveSheet ' = Worksheets("Tabelle1") 'Makrobremsen lösen With Application .ScreenUpdating = False .EnableEvents = False StatusCalc = .Calculation .Calculation = xlCalculationManual End With With wks 'Alle Spalten einblenden .Columns.Hidden = False Zeile1 = 3 'Zeile mit Spaltentitel/Personennamen 'Nummer der letzten Zeile des Tabellenobjekts. With .ListObjects(1).Range Zeile2 = .Row + .Rows.Count - 1 End With 'letzte Spalte in Zeile mit Spaltentiteln Spalte = .Cells(Zeile1, .Columns.Count).End(xlToLeft).Column 'Daten des Filterbereichs in Array laden arrData = .Range(.Cells(Zeile1 + 1, 1), .Cells(Zeile2, Spalte)) 'Nummern der sichtbaren Zeilen des Filterbereichs in Array einlesen For Zeile = Zeile1 + 1 To Zeile2 If .Rows(Zeile).EntireRow.Hidden = False Then intVisible = intVisible + 1 ReDim Preserve arrVisible(1 To intVisible) arrVisible(intVisible) = Zeile - Zeile1 End If Next 'Spalten prüfen und ausblenden wenn leere Zellen vorkommen For Spalte = 4 To UBound(arrData, 2) bolHide = False For intVisible = LBound(arrVisible) To UBound(arrVisible) If arrData(arrVisible(intVisible), Spalte) = "" Then 'Zelle enthält keinen Text bolHide = True Exit For End If Next If bolHide = True Then .Columns(Spalte).EntireColumn.Hidden = True Next End With 'Makrobremsen zurücksetzen With Application .ScreenUpdating = True .EnableEvents = True .Calculation = StatusCalc End With End Sub
![]() |