AW: Wenn gesamte Spalte 0, löschen. Aber:Filter
17.12.2015 02:44:16
fcs
Hallo Kerstin,
ich bin in meinem Beisspiel von der evtl. falschen Annahme ausgegangen, dass die Formeln in den Spalten A bis D Zahlenwerte als Ergebnis ausgeben. Entweder 0 oder einen Wert > 0.
Mit der Funktion SubTotal oder deutsch TEILERGEBNIS kann man dann die Summe der Werte in den sichtbaren (per Filter nicht ausgeblendeten Zeilen) Zeilen einer Spalte berechen.
Die hab ich in meinem Makro angewendet.
Eine Methode zur Ermittling der letzten Zeile mit Inhalt ist in meiner Lösung auch enthalten. Sie funktioniert aber nur bei sichtbaren Zellen, des lasse ich vom Makro erst alle Spalten einblenden, um dann die Spalten mit TEILERGEBNIS = 0 wieder auszublenden.
Falls meine Annahmen falsch sind (1. Formelergebnisse sind Zahlen, 2. Zahlenwerte sind >0) dann muss man eine andere Lösung suchen.
Dein gefundenens Makro erweitert bezüglich sichtbare Zeilen und variable letzte Zeile könnte so aussehen:
Sub SpaltenAusblenden()
Dim leer As Boolean
Dim Spalte As Long, Zeile As Long, Zeile_L As Long
With ActiveSheet
'letzte Zeile mit Inhalt in Spalte A (1) - eine Spalte wählen, die nie _
ausgeblendet wird und in allen Zeilen einen Wert/Formel enthält!
Zeile_L = .Cells(.Rows.Count, 1).End(xlUp).Row
For Spalte = 26 To 9 Step -1 'Spalten Z (=29) bis I (=9) bearbeiten
leer = True
'alternative Methode (setzt voraus, dass ab Zeile 5 bis zum Ende der Liste alle _
Zellen in der Spalte Werte/Formeln enthalten)
Zeile_L = .Rows.Count
Zeile_L = 4 + Application.WorksheetFunction.CountA(.Range(.Cells(5, Spalte), _
.Cells(Zeile_L, Spalte)))
For Zeile = 5 To Zeile_L
'Prüfen, ob für Zelle Werte ungleich "0" abgezeigt werden.
With .Cells(Zeile, Spalte)
If .EntireRow.Hidden = False _
And .Text "0" _
And Not .Text = "" Then
leer = False
Exit For
End If
End With
Next
If leer Then
.Columns(Spalte).Hidden = True 'Spalte nur ausblenden
'.Columns(Spalte).Delete Shift:=xlToLeft 'Spalte löschen
End If
Next
End With
End Sub
Gruß
Franz