Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1312to1316
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Mehrere Spalten ausblenden

VBA: Mehrere Spalten ausblenden
28.05.2013 17:15:02
NillePet
Hallo Forumgemeinde,
ich bin nicht unbedingt ein VBA-Spezi und verzweifle gerade an folgendem Problem:
Die Daten die ich filtern möchte erstrecken sich über relativ viele Spalten. Gefiltert werden sollen die Spalten anhand der Werte in der Zeile 4, die dann aufgrund der Angabe in Zelle B4 selektiert wird. Zum anderen sollen die Spalten anhand der Werte in Zeile 3 gefiltert werden, die dann aufgrund der Eingabe in Zelle B3 selektiert werden sollen.
Zum filtern anhand eines Kriteriums habe ich folgenden Code gefunden, der auch wunderbar _ funktioniert (Zeile 4 filtern anhand Eingabe in B4):

Private Sub Worksheet_change(ByVal Target As Range)
Dim Zelle As Range
Dim Filterzeile As Range
Set Filterzeile = Range(Cells(1, 4), Range("IV4").End(xlToLeft))
If Target.Address  "$B$4" Then Exit Sub
If Target = "" Then Columns.Hidden = False
If WorksheetFunction.CountIf(Filterzeile, Target) = 0 Then Exit Sub
For Each Zelle In Filterzeile
Zelle.EntireColumn.Hidden = Zelle  Range("B4")
Next
End Sub

Danach habe ich den Code auch erfolgreich so umgeändert, dass er Zeile 3 anhand der Eingabe in _ B3 filtert:

Private Sub Worksheet_change(ByVal TargetII As Range)
Dim ZelleII As Range
Dim FilterzeileII As Range
Set FilterzeileII = Range(Cells(1, 3), Range("IV3").End(xlToLeft))
If TargetII.Address  "$B$3" Then Exit Sub
If TargetII = "" Then Columns.Hidden = False
If WorksheetFunction.CountIf(FilterzeileII, TargetII) = 0 Then Exit Sub
For Each ZelleII In FilterzeileII
ZelleII.EntireColumn.Hidden = ZelleII  Range("B3")
Next
End Sub

Nur Leider will mir die Kombination aus beidem nicht gelingen.
Habt Ihr eine Idee?
Vielen Dank und viele Grüße
NilleP

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Na logisch!
29.05.2013 06:36:02
Marc
Moin!
Mit deiner letzten Zeile nimmst du die Prüfung des Zellinhaltes B3 und des Spalteninhaltes als "ist-hidden"-Wert, also Wahr oder falsch.
Du haust also mit deiner Bedingung alle vorher gemachten Prüfungen der anderen Zeile wieder durcheinander.
du könntest schreiben

if ZelleII.EntireColumn.Hidden = false then (deine Zeile)

dann würden bereits ausgeblendete Zeilen nicht wieder eingeblendet.
Probier das mal.
Gruß, MCO

AW: Na logisch!
29.05.2013 09:48:16
NillePet
Moin Marc,
vielen Dank für Deine Antwort.
Ich habe diese aufgrund meines eingeschränkten VBA-Horizonts leider nicht richtig verstehen können.
Könntest Du bitte Deinen Lösungsvorschlag nochmal als kompletten Code posten?
Vielleicht noch mal zum Problem selber, auf die Gefahr hin das ich mich am Anfang missvertsändlich ausgedrückt habe.
Man stelle sich bitte folgende Tabellensituation vor:
************************
A B C D
1 1 2 3
Meier Hintz Kuntz Schulz
************************
Die Spalten A-D sollen gefiltert werden, jedoch so, dass am Ende nicht Zeilen ausgeblendet werden, sondern Spalten. In den Spalten A-D stehen hierzu in verschiedenen Zeilen Werte, nach denen gefiltert werden soll. Der Filter selber soll durch Eingabe in einer bestimmten Zelle gesetzt werden, hier z.B. E1.
Ich möchte zum Beispiel die erste Zeile nach dem Wert 1 filtern (Zellle E1=1), d.h. die Spalten C und D würden daraufhin ausgeblendet werden. Für diesen Fall habe ich ja den entsprechende Code gefunden.
Leider gelingt es mir nicht diesen so zu erweitern, dass man zusätzlich noch in der zweiten Zeile z.B. gemäß Eingabe in Zelle E2 filtert, z.B. nach Meier (E2="Meier"), so dass dann in der Kombination mit dem ersten Filter (E1=1) noch zusätzlich die Spalte B ausgeblendet würde
.
Insgesamt soll der Filter dann so ausgestaltet sein, dass entweder nach beiden Kriterien gefiltert wird, oder lediglich nach einem wenn nur E1 oder E2 einen Wert haben, oder es soll gar nicht gefiltert werden wenn die Zellen E1 und E2 leer sind
Soweit so verzwickt.
VG
NilleP

Anzeige
Ein Stück dichter dran
29.05.2013 11:51:58
NillePet
Moin nochmal,
bin jetzt ein Stück dichter dran an der Lösung.
Mit dem folgenden Code habe ich zumindest die Lösung für den Fall gefunden, dass ich in Zeile 3 und in Zeile 4 jeweils nach einem Kriterium filter.
Leider deckt das natürlich noch nicht die Fälle ab, in denen ich jeweils nur nach einem Kriterium filtern möchte, oder halt gar nicht.
Private Sub Worksheet_change(ByVal Target As Range)
Dim ZelleII As Range
Dim FilterzeileII As Range
Dim Zelle As Range
Dim Filterzeile As Range
Set FilterzeileII = Range(Cells(1, 4), Range("IV4").End(xlToLeft))
'If Target.Address  "$B$4" Then Exit Sub
'If Target = "" Then Columns.Hidden = False
'If WorksheetFunction.CountIf(FilterzeileII, Target) = 0 Then Exit Sub
For Each ZelleII In FilterzeileII
ZelleII.EntireColumn.Hidden = ZelleII  Range("B4")
Next
Set Filterzeile = Range(Cells(1, 3), Range("IV3").End(xlToLeft))
'If Target.Address  "$B$3" Then Exit Sub
'If Target = "" Then Columns.Hidden = False
'If WorksheetFunction.CountIf(Filterzeile, Target) = 0 Then Exit Sub
For Each Zelle In Filterzeile
Zelle.EntireColumn.Hidden = Zelle  Range("B3")
Next
End Sub

Anzeige
AW: Crosspost!
29.05.2013 14:10:58
NillePet
Hallo Hansueli,
hatte im anderen Forum den Thread erst heute morgen gefunden. Die Suche vorher war erfolglos geblieben.
Daher hatte ich hier noch einen neuen Thread aufgemacht.
Die Lösung kann den Lesern hier ja auch weiterhelfen.
VG
Niels

339 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige