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

Spalten Filtern mit VBA

Forumthread: Spalten Filtern mit VBA

Spalten Filtern mit VBA
28.05.2009 13:00:50
Uwe
Halli Hallo
Ich bräuchte einen Code, der nach einem Begriff (steht in Zelle B3) sucht und alle Spalten filtert, in denen der Begriff in Zeile 4 auftaucht.
Wie kann ich das Bewerkstelligen?
Wenn möglich ohne Klickfläche. Nach eingeben des Scuhkriteriums in Zelle B3 und entern, soll sofort gefiltert werden.
Jemand einen Vorschlag?
LG Uwe
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Spalten Filtern mit VBA
28.05.2009 13:57:43
NoNet
Hallo Uwe,
da der Autofilter nur Zeilen filtern kann, benötigt man dazu ein programmiertes Makro.
Kopiere den folgenden VBA Code in das Klassenmodul des Tabellenblattes im VBA-Editor :
VBA-Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rngZelle As Range, strAdr As String
    If Not Intersect(Target, [B3]) Is Nothing Then  'Wenn Eingabe in B3 erfolgte
        Cells.Columns.Hidden = True                 'Alle Spalten zunächst ausblenden
        Columns("A:B").Hidden = False               'Spalten A:B wieder einblenden
        With Rows(4)                                'Suche Wert in kompletter Zeile 4
            Set rngZelle = .Find([B3].Value)        'Suche nach Wert der Zelle B3
            If Not rngZelle Is Nothing Then strAdr = rngZelle.Address
            While Not rngZelle Is Nothing
                rngZelle.EntireColumn.Hidden = False 'Spalte mit gefundenem Wert einblenden
                Set rngZelle = .FindNext(after:=rngZelle)   'Weitersuchen
                If rngZelle.Address = strAdr Then Set rngZelle = Nothing
            Wend
        End With
    End If
    Set rngZelle = Nothing
End Sub
Gruß, NoNet
AW: Spalten Filtern mit VBA
Uwe

Hallo Danke, funktioniert zunächst sehr gut!
Wenn ich den Wert in Zelle B3 allerdings wieder lösche, dann werden alle Spalten versteckt und ich muss sie manuel wieder einblenden. Kann man das noch verfeinern?
Ausserdem findet er bei dem Suchbegriff "i" sowohl "i" für Italien, als auch "fin" für Finnland. Kann man das verhindern?
LG Uwe
Spalten exakt Filtern mit VBA
NoNet

Hallo Uwe,
hier das angepasste Makro :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngZelle As Range, strAdr As String
If Not Intersect(Target, [B3]) Is Nothing Then      'Wenn Eingabe in B3 erfolgte
If [B3].Value = "" Then                         'Wenn B3 gelöscht wurde
Cells.Columns.Hidden = False                'Alle Spalten wieder einblenden
Else                                            'Ansonsten :
Cells.Columns.Hidden = True                 'Alle Spalten zunächst ausblenden
Columns("A:B").Hidden = False               'Spalten A:B wieder einblenden
With Rows(4)                                'Suche Wert in kompletter Zeile 4
Set rngZelle = .Find([B3].Value, lookat:=xlWhole) 'Suche nach Wert der Zelle B3
If Not rngZelle Is Nothing Then strAdr = rngZelle.Address
While Not rngZelle Is Nothing
rngZelle.EntireColumn.Hidden = False 'Spalte mit gefundenem Wert einblenden
Set rngZelle = .FindNext(after:=rngZelle)   'Weitersuchen
If rngZelle.Address = strAdr Then Set rngZelle = Nothing
Wend
End With
End If
End If
Set rngZelle = Nothing
End Sub


Gruß, NoNet
PS: Zum Auffinden von "Italien" und "Finnland" (oder auch "Hanni" und "Sushi") kannst Du in B3 mit Platzhaltern arbeiten : i*

DANKE
Uwe

Vielen Dank für deine Hilfe!!!!!
Einen wunderschönen verregneten Dönerstag wünsch ich Euch
LG Uwe
AW: Spalten Filtern mit VBA
Uwe

Hallo Danke, funktioniert zunächst sehr gut!
Wenn ich den Wert in Zelle B3 allerdings wieder lösche, dann werden alle Spalten versteckt und ich muss sie manuel wieder einblenden. Kann man das noch verfeinern?
Ausserdem findet er bei dem Suchbegriff "i" sowohl "i" für Italien, als auch "fin" für Finnland. Kann man das verhindern?
LG Uwe
Anzeige
AW: Spalten Filtern mit VBA
28.05.2009 14:55:47
Uwe
Hallo Danke, funktioniert zunächst sehr gut!
Wenn ich den Wert in Zelle B3 allerdings wieder lösche, dann werden alle Spalten versteckt und ich muss sie manuel wieder einblenden. Kann man das noch verfeinern?
Ausserdem findet er bei dem Suchbegriff "i" sowohl "i" für Italien, als auch "fin" für Finnland. Kann man das verhindern?
LG Uwe
Anzeige
Spalten exakt Filtern mit VBA
28.05.2009 15:49:31
NoNet
Hallo Uwe,
hier das angepasste Makro :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngZelle As Range, strAdr As String
If Not Intersect(Target, [B3]) Is Nothing Then      'Wenn Eingabe in B3 erfolgte
If [B3].Value = "" Then                         'Wenn B3 gelöscht wurde
Cells.Columns.Hidden = False                'Alle Spalten wieder einblenden
Else                                            'Ansonsten :
Cells.Columns.Hidden = True                 'Alle Spalten zunächst ausblenden
Columns("A:B").Hidden = False               'Spalten A:B wieder einblenden
With Rows(4)                                'Suche Wert in kompletter Zeile 4
Set rngZelle = .Find([B3].Value, lookat:=xlWhole) 'Suche nach Wert der Zelle B3
If Not rngZelle Is Nothing Then strAdr = rngZelle.Address
While Not rngZelle Is Nothing
rngZelle.EntireColumn.Hidden = False 'Spalte mit gefundenem Wert einblenden
Set rngZelle = .FindNext(after:=rngZelle)   'Weitersuchen
If rngZelle.Address = strAdr Then Set rngZelle = Nothing
Wend
End With
End If
End If
Set rngZelle = Nothing
End Sub


Gruß, NoNet
PS: Zum Auffinden von "Italien" und "Finnland" (oder auch "Hanni" und "Sushi") kannst Du in B3 mit Platzhaltern arbeiten : i*

Anzeige
DANKE
28.05.2009 15:56:05
Uwe
Vielen Dank für deine Hilfe!!!!!
Einen wunderschönen verregneten Dönerstag wünsch ich Euch
LG Uwe
AW: Spalten Filtern mit VBA
28.05.2009 15:52:53
Uwe
Hallo Danke, funktioniert zunächst sehr gut!
Wenn ich den Wert in Zelle B3 allerdings wieder lösche, dann werden alle Spalten versteckt und ich muss sie manuel wieder einblenden. Kann man das noch verfeinern?
Ausserdem findet er bei dem Suchbegriff "i" sowohl "i" für Italien, als auch "fin" für Finnland. Kann man das verhindern?
LG Uwe
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige

Infobox / Tutorial

Spalten Filtern mit VBA in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf den entsprechenden Arbeitsblattnamen im Projekt-Explorer und wähle „Code anzeigen“.
  3. Kopiere den folgenden VBA-Code:

    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim rngZelle As Range, strAdr As String
       If Not Intersect(Target, [B3]) Is Nothing Then
           If [B3].Value = "" Then
               Cells.Columns.Hidden = False
           Else
               Cells.Columns.Hidden = True
               Columns("A:B").Hidden = False
               With Rows(4)
                   Set rngZelle = .Find([B3].Value, lookat:=xlWhole)
                   If Not rngZelle Is Nothing Then strAdr = rngZelle.Address
                   While Not rngZelle Is Nothing
                       rngZelle.EntireColumn.Hidden = False
                       Set rngZelle = .FindNext(after:=rngZelle)
                       If rngZelle.Address = strAdr Then Set rngZelle = Nothing
                   Wend
               End With
           End If
       End If
       Set rngZelle = Nothing
    End Sub
  4. Schließe den VBA-Editor:

    • Klicke auf das „X“ oder drücke ALT + Q, um den Editor zu schließen und zu Excel zurückzukehren.
  5. Teste die Funktion:

    • Gib einen Suchbegriff in Zelle B3 ein. Die Spalten werden automatisch gefiltert.

Häufige Fehler und Lösungen

  • Problem: Alle Spalten werden versteckt, wenn der Wert in B3 gelöscht wird.

    • Lösung: Der oben angegebene VBA-Code behebt dieses Problem, indem er sicherstellt, dass alle Spalten wieder eingeblendet werden, wenn B3 leer ist.
  • Problem: Der Filter findet auch ähnliche Begriffe (z.B. "i" findet "Italien" und "Finnland").

    • Lösung: Verwende Platzhalter in B3, z.B. i*, um nur Begriffe zu finden, die mit „i“ beginnen.

Alternative Methoden

  • Excel-Filter verwenden:

    • Wenn Du keine VBA-Lösung verwenden möchtest, kannst Du das integrierte Filter-Feature von Excel nutzen. Gehe zu „Daten“ > „Filter“ und wähle die Spalten aus, die Du filtern möchtest.
  • Power Query:

    • Mit Power Query kannst Du komplexe Datenabfragen durchführen und die Daten nach Spalten filtern. Dies ist besonders nützlich für umfangreiche Datenanalysen.

Praktische Beispiele

  1. Einfacher Filter:

    • Wenn Du in B3 "Verkauf" eingibst, werden nur die Spalten angezeigt, die in Zeile 4 den Begriff "Verkauf" enthalten.
  2. Platzhalter verwenden:

    • Gib in B3 A* ein, um alle Spalten anzuzeigen, die mit „A“ beginnen, z.B. „Apfel“ oder „Ananas“.

Tipps für Profis

  • Automatisierung: Kombiniere dieses VBA-Skript mit anderen Makros, um Deine Excel-Spaltenfilterung noch effizienter zu gestalten.
  • Fehlerbehandlung: Füge Fehlerbehandlungsroutinen in Deinen VBA-Code ein, um unerwartete Fehler elegant zu handhaben.
  • Dokumentation: Kommentiere Deinen Code gründlich, damit Du und andere Benutzer die Logik hinter dem VBA-Skript leicht nachvollziehen können.

FAQ: Häufige Fragen

1. Frage
Kann ich das Makro auch für andere Zellen als B3 verwenden?
Antwort: Ja, Du kannst die Zellreferenz in dem VBA-Code anpassen, um das Makro für andere Zellen zu verwenden.

2. Frage
Wie kann ich die Filterung rückgängig machen?
Antwort: Um die Filterung rückgängig zu machen, lösche den Inhalt von Zelle B3. Alle Spalten werden dann wieder angezeigt.

3. Frage
Funktioniert dieser VBA-Code in allen Excel-Versionen?
Antwort: Ja, der Code sollte in Excel-Versionen ab 2010 funktionieren, solange der VBA-Editor verfügbar ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige