Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Spalten bei bestimmten Wert ausblenden per Vba

Forumthread: Spalten bei bestimmten Wert ausblenden per Vba

Spalten bei bestimmten Wert ausblenden per Vba
10.08.2025 19:35:27
Robert Pilz
Hallo Ihr lieben Exelfreunde

Ich bräuchte nochmals Eure Hilfe. Habe nun ein Makro geschrieben wo ich Spalten an Hand von 0 ausblenden möchte. Bringt aber die Meldung Visual Fehler 400.
Sub SpaltenNachBedingungAusblenden()

Dim ws As Worksheet
Dim rng As Range
Dim cell As Range
Dim checkRow As Long
Dim colsToCheck As String


Set ws = ActiveSheet
checkRow = 4
colsToCheck = "A,B,C,D,E,F" ' Zu prüfende Spalten

Application.ScreenUpdating = False


Set rng = ws.Range(colsToCheck)

For Each cell In rng.Cells
' Prüfe nur die festgelegte Zeile
If cell.Row = checkRow Then
If cell.Value = 0 Or _
LCase(cell.Value) = "spalten ausblenden" Then
cell.EntireColumn.Hidden = True
Else
cell.EntireColumn.Hidden = False
End If
End If
Next cell

Application.ScreenUpdating = True
MsgBox "Spalten wurden basierend auf Zeile " & checkRow & " verarbeitet., vbInformation"
End Sub


Wäre sehr schön wenn Ihr mir helfen könntet.


Danke im voraus.

MfG Robert
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalten bei bestimmten Wert ausblenden per Vba
10.08.2025 20:02:07
ralf_b
versuchs mal damit, rng wird nur auf die zu prüfenden Zellen eingegrenzt.

 

colsToCheck = "A:F" ' Zu prüfende Spalten
Application.ScreenUpdating = False
Set rng = Intersect(ws.Rows(checkRow), ws.Range(colsToCheck))
AW: Spalten bei bestimmten Wert ausblenden per Vba
11.08.2025 10:55:27
schauan
Hallöchen,

mal abgesehen von den bisherigen Lösungen - mich würde interessieren, wo kommt denn der Fehler 400?
Zuerst kommt vermutlich 1004 wegen Set rng = ws.Range(colsToCheck) weil eine Bereichsdefinition mit Komma so nicht geht.

bei diskotinuierlichen Spaltenangaben könnte man das so lösen
colsToCheck = "A,C,D,F" ' Zu prüfende Spalten

colarr = Split(colsToCheck, ",")
Set rng = ws.Columns(colarr(0))
For i = 1 To UBound(colarr)
Set rng = Union(rng, ws.Columns(colarr(i)))
Next

Bei z.B. wenigen Spalten kann man die Spalten natürlich gleich als Array definieren, bei längeren Listen spart man sich ein paar Anführungszeichen, die man auch schnell mal übersieht ;-)
Für Deinen Fall der zusammenhängenden Spalten hast Du ja hier im Thread zwei Ansätze. ;-)


Anzeige
AW: Spalten bei bestimmten Wert ausblenden per Vba
10.08.2025 21:13:29
GerdL
Hallo Robert!
Sub Unit()


Dim WS As Worksheet, cell As Range, checkRow As Long, colsToCheck As String


Set WS = ActiveSheet
checkRow = 4
colsToCheck = "A:F" ' Zu prüfende Spalten

Application.ScreenUpdating = False

For Each cell In Intersect(WS.Rows(checkRow), WS.Range(colsToCheck)).Cells
cell.EntireColumn.Hidden = _
(cell.Value = 0 Or LCase(cell.Value) = "spalten ausblenden")
Next cell

Application.ScreenUpdating = True

MsgBox "Spalten wurden basierend auf Zeile " & checkRow & " verarbeitet., vbInformation"


End Sub

Gruß Gerd
Anzeige
AW: Spalten bei bestimmten Wert ausblenden per Vba
11.08.2025 10:56:33
schauan
Hallöchen,

mal abgesehen von den bisherigen Lösungen - mich würde interessieren, wo kommt denn der Fehler 400?
Zuerst kommt vermutlich 1004 wegen Set rng = ws.Range(colsToCheck) weil eine Bereichsdefinition mit Komma so nicht geht.

bei diskotinuierlichen Spaltenangaben könnte man das so lösen

colsToCheck = "A,C,D,F" ' Zu prüfende Spalten

colarr = Split(colsToCheck, ",")
Set rng = ws.Columns(colarr(0))
For i = 1 To UBound(colarr)
Set rng = Union(rng, ws.Columns(colarr(i)))
Next



Bei z.B. wenigen Spalten kann man die Spalten natürlich gleich als Array definieren, bei längeren Listen spart man sich ein paar Anführungszeichen, die man auch schnell mal übersieht ;-)
Für Deinen Fall der zusammenhängenden Spalten hast Du ja hier im Thread zwei Ansätze. ;-)
Anzeige
AW: Spalten bei bestimmten Wert ausblenden per Vba
11.08.2025 18:29:56
Robert Pilz
Hallo Ihr lieben Exeler;

erstmal vielen Dank für Eure Hinweise und Vorschläge und vor allem die Zeit und Mühe die Ihr investiert habt. Die Lösung von Gerdl funktioniert für jeweils 1 Zelle für meine Zwecke. Nun meine Frage geht das auch mit verbundenen Zellen. z.B. J:O; Q:V; X:AC; AE:AJ; AL:AQ; AS:AX usw..
Würde noch mal Gerdl Lösung rein setzen. Vielleicht kann mir Jemand helfen wie ich erreiche, das die die verbundenen Zellen per VBA als ein behandelt werden.
Sub Unit()


Dim WS As Worksheet, cell As Range, checkRow As Long, colsToCheck As String


Set WS = ActiveSheet
checkRow = 4
colsToCheck = "A:F" ' Zu prüfende Spalten

Application.ScreenUpdating = False

For Each cell In Intersect(WS.Rows(checkRow), WS.Range(colsToCheck)).Cells
cell.EntireColumn.Hidden = _
(cell.Value = 0 Or LCase(cell.Value) = "spalten ausblenden")
Next cell

Application.ScreenUpdating = True

MsgBox "Spalten wurden basierend auf Zeile " & checkRow & " verarbeitet., vbInformation"


End Sub


Für Eure Mühe danke ich Euch im voraus.


Mfg Robert
Anzeige
AW: Spalten bei bestimmten Wert ausblenden per Vba
11.08.2025 18:37:45
daniel
Hi

teste mal:

cell.MergeArea.EntireColumn.Hidden = _
(cell.Value = 0 Or LCase(cell.Value) = "spalten ausblenden")

Gruß Daniel
AW: Spalten bei bestimmten Wert ausblenden per Vba
11.08.2025 18:56:54
Robert Pilz
Hallo Daniel;

so wird der gesamt angegebene Bereich aus geblendet. Leider Gibt es vielleicht noch eine andere Lösung.


MfG Robert
Anzeige
AW: Spalten bei bestimmten Wert ausblenden per Vba
11.08.2025 18:50:06
Uduuh
Hallo,
Cell.MergeArea.EntireColumn.Hidden = Cell.MergeArea(1) = 0 Or LCase(Cell.MergeArea(1)) = "spalte ausblenden"


Gruß aus'm Pott
Udo
AW: Spalten bei bestimmten Wert ausblenden per Vba
11.08.2025 19:48:51
Robert Pilz
Hallo Udo;

das Funzt. Herzlichen Dank Euch beiden.



MfG Robert
zugabe
12.08.2025 01:10:05
Uduuh
hatte gerade Zeit und Lust
Sub SpaltenAusblenden()

Dim rngCell As Range
Dim vntSpalten, lngSpalten As Long

Const lngRow As Long = 4
'vntSpalten = Split(WorksheetFunction.Trim("A:F J:O Q:V X:AC AE:AJ AL:AQ AS:AX"))

'eigentlich reicht bei den verbundenen Zelle eine beliebige:
vntSpalten = Split(WorksheetFunction.Trim("A:F k s X AE AL AS"))

Application.ScreenUpdating = False
Columns.Hidden = False

For lngSpalten = 0 To UBound(vntSpalten)
If Not vntSpalten(lngSpalten) Like "*:*" Then _
vntSpalten(lngSpalten) = vntSpalten(lngSpalten) & ":" & vntSpalten(lngSpalten) 'nur eine Spalte (k s x) angegeben
For Each rngCell In Intersect(Rows(lngRow), Range(vntSpalten(lngSpalten))).Cells
With rngCell
Select Case True
Case .MergeArea(1) = 0, LCase(.MergeArea(1)) = "spalte ausblenden"
.MergeArea.EntireColumn.Hidden = True
End Select
End With
Next rngCell
Next lngSpalten

End Sub
Anzeige
AW: zugabe
12.08.2025 17:18:04
Robert Pilz
Danke an alle die mir geholfen haben.

MlG Robert

Forumthreads zu verwandten Themen

Anzeige
Anzeige