Microsoft Excel

Herbers Excel/VBA-Archiv

Spalten ausblenden, wenn Leer

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



 

Beiträge aus den Excel-Beispielen zum Thema "Spalten ausblenden, wenn Leer"