906 Aufrufe
Gefragt in Tabellenkalkulation von jelena Experte (1.1k Punkte)
Guten Tag, es sollen Leere Spalten aus manuell markiertem Bereich ausblendet werden, z.B. ich markiere den Bereich von C3:O33, sollte in Spalte D3:D33 kein wert enthalten sein (nur Formeln) so soll diese Spalte über mein erstelltes Formularsteuerelement ausgeblendet werden. Danke

25 Antworten

0 Punkte
Beantwortet von
Sub LeereSpaltenAusblenden()
  Dim Bereich As Range, Spalte As Range
    If TypeName(Selection) <> "Range" Then Exit Sub
     Set Bereich = Selection
        Application.ScreenUpdating = False
        For Each Spalte In Bereich.Columns
        If Application.WorksheetFunction.CountA(Spalte) = 0 Then
            Spalte.EntireColumn.Hidden = True
        End If
    Next Spalte
        Application.ScreenUpdating = True
End Sub
0 Punkte
Beantwortet von beverly_ Experte (3.6k Punkte)
Hi Jelena,

was verstehst du unter "kein Wert ... (nur Formeln)"? Sind damit fix eingetragene Werte gemeint oder sind alles Formelergebnisse die "" als Ergebnis haben können?

Sollen alle markierten Spalten in einer Schleife durchlaufen werden oder hast du mehrere Steuerelemente, die sich jeweils auf eine bestimmte Spalte beziehen und soll immer nur die betreffende Spalte augeblendet werden?

Bis später, Karin
0 Punkte
Beantwortet von jelena Experte (1.1k Punkte)
Hallo Karin, die Formel ist als (Buchhaltung) und als ([=0]"";- #.##0,00 €; #.##0,00 € ) formatiert, und das Formelergebniss ohne Wert (""), und es kann sein, dass mehrere markierte Spalten ein ("") Formelergebniss haben. Danke
0 Punkte
Beantwortet von beverly_ Experte (3.6k Punkte)

Hi Jelena,

versuche es mal auf diesem Weg:

Sub SpaltenAusblenden()
    Dim rngZelle As Range
    For Each rngZelle In Selection.Rows(1).Cells
        If Application.Count(Selection.Columns(rngZelle.Column)) = 0 Then rngZelle.EntireColumn.Hidden = True
    Next rngZelle
End Sub

Bis später, Karin

0 Punkte
Beantwortet von jelena Experte (1.1k Punkte)

Hallo Karin, es sollen laut Beispiel die Spalten E, F, G, H, I, J und L, M, N ausgeblendet werden. Danke

0 Punkte
Beantwortet von beverly_ Experte (3.6k Punkte)

Hi Jelena,

dann so:

Sub SpaltenAusblenden()
    Dim intZaehler As Integer
    For intZaehler = 1 To Selection.Rows(1).Cells.Count
        If Application.Sum(Selection.Columns(intZaehler)) = 0 Then Selection.Columns(intZaehler).EntireColumn.Hidden = True
    Next intZaehler
End Sub

Bis später, Karin

0 Punkte
Beantwortet von jelena Experte (1.1k Punkte)
Hallo Karin, das funktioniert super. Wenn möglich auch die leeren Zeilen hier einbauen. Danke
0 Punkte
Beantwortet von xlking Experte (1.9k Punkte)

Hi ihr Beiden,

Karins Lösung ist schon mal ganz gut, aber das über Sum zu lösen ist gefährlich. Es kann auch eine positive und eine Negative Zahl gleicher Höhe in der Spalte stehen und in Summe 0 ergeben, womit diese Daten ebenfalls ausgeblendet würden. Außerdem ist im Beispielbild nur Zeile 1 markiert. Selection.Columns gibt in dem Fall nur die einzelnen Zellen der ersten Zeile zurück.

Hier mein Codevorschlag:

Sub Ausblenden()
  
  Dim firstrow As Long, lastrow As Long, r As Range, s As Range
  
  firstrow = 1
  lastrow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
  
  Set r = Range(Cells(firstrow, Selection.Columns(1).Column), Cells(lastrow, Selection.Columns(1).Column + Selection.Columns.Count - 1))
  
  For Each s In r.Columns
    If Application.CountIf(s, 0) + Application.CountBlank(s) = s.Cells.Count Then s.EntireColumn.Hidden = True
  Next s
  
End Sub

Gruß Mr. K.

0 Punkte
Beantwortet von jelena Experte (1.1k Punkte)
Hallo Mr. K. mit diesem Code wird nichts ausgeblendet trotzdem Danke.
0 Punkte
Beantwortet von xlking Experte (1.9k Punkte)

Hi Jelena,

bei mir schon, sonst hätte ich ihn nicht gepostet. Kann es sein, dass du neben Nullen und Leerzellen auch noch andere Werte in deiner Sheet hast? z.B. Nullstrings "" Dann ersetze Application.CountBlank(s) durch Application.CountIf(s, "")

Ansonsten lade mal eine Beispielmappe hier hoch. Wie das geht, weißt du ja inzwischen. wink

Gruß Mr. K.

...