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

Forumthread: VBA Autofilter Index auslesen

VBA Autofilter Index auslesen
08.01.2005 14:07:09
John
Hallo ihr alle,
ich suche nach einem Befehl, der im Autofilter den wert (Indexwert?) des Filters ausliest.
Am praktischen Beispiel:
In der Spalte D steht mein Cursor. Diese Spalte hat einen Autofilter.
z.B. "Selection.Autofilter.Filters(3)" oder auch "Selection.Autofilter Field:=3"
Ich suche nun einen Befehl, mit dem ich diese "3" auslesen kann.
Wäre toll, wenn mir jemand helfen könnte.
Gruß
John
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA Autofilter Index auslesen
Boris
Hi John,
ohne jegliche Fehlerabfragen - nur quick and dirty:
Option Explicit

Sub autofilter_auslesen()
Dim af As AutoFilter, i As Integer
Set af = ActiveSheet.AutoFilter
With af
For i = 1 To .Filters.Count
If .Filters(i).On Then
MsgBox "Filter " & i & " ist aktiv."
End If
Next i
End With
End Sub

Grüße Boris
Anzeige
AW: VBA Autofilter Index auslesen
John
Hallo Boris,
danke für deine Antwort.
Diese Möglichkeit habe ich bereits gekannt, trotzdem danke.
Meine Frage zielte auf ein anderes Problem:
Ich habe in der Spalte D den Cursor stehen. Das Makro soll nun den Wert des Filters, also wie bereits gesagt die 3 bei z.B. Autofilter.Filters(3) zurückgeben.
Ich benötige diesen Wert um ein VBA zu schreiben, das sehr flexibel die Daten eines Filters aufbereitet und als neue Datei ausgibt. Problem dabei, dass die Filter auf immer wider neue Spalten, sprich Filter-Nummern zugreifen muss. Steht der Cursor in Spalte D, soll er den Wert des Filters in Spalte D zurück geben, steht der Cursor in Spalte F, soll er den Wert dieses Filters zurück geben.
Du verstehtst was ich meine?
Nochmals Danke
John
Anzeige
AW: VBA Autofilter Index auslesen
Kurt
Hallo Leute,
habe da was gefunden.
Option Explicit

Sub FilterFinden()
Dim i As Long, u As Long, z As Integer, t As Integer, r As Integer
Dim str_ausgabe As String
Dim ws As Worksheet
Dim FeldArray()
Set ws = Worksheets(1)
'Prüfen, ob überhaupt ein Autofilter gesetzt ist
If ws.AutoFilterMode = True Then
Else
MsgBox "Kein AutoFilter gefunden!", vbInformation, "Achtung"
Exit Sub
End If
'Der Array wird für die Datenaufnahme vorbereitet. Die Größe ergiebt sich aus dem Bereich
'(columns und rows) des Auofilter's
ReDim Preserve FeldArray(ws.AutoFilter.Range.Rows.Count, ws.AutoFilter.Range.Columns.Count)
'Variable u beinhaltet die Anzahl der Spalten des Autofilterbereiches
For u = 1 To ws.AutoFilter.Range.Columns.Count
r = 1
'Variable i beinhaltet die Anzahl der Reihen des Autofilterbereiches
For i = 1 To ws.AutoFilter.Range.Rows.Count
'Der erste Spaltenwert eines Filters wird ohne Prüfung in den Array eingetrage,
'da dieser noch nicht Doppelte sein kann
If i = 1 Then
FeldArray(i, u) = ws.AutoFilter.Range.Cells(i, u)
Else
For z = 1 To i - 1
'Nun wird die aktuelle zelle des Autofilterbereiches mit den schon im Array eingetragenen Werten verglichen
'Ist er gleich, so wird die Sprungmarke weiter angesteuert
'ist er nicht gleich, so wird der Array um diesen Datensatz erweitert
If ws.AutoFilter.Range.Cells(i, u) = FeldArray(z, u) Then
GoTo Weiter
End If
Next z
r = r + 1
'array wird erweitert
FeldArray(r, u) = ws.AutoFilter.Range.Cells(i, u)
Weiter:
End If 'i=then
Next i
Next u
'Die Daten werden in einen String gepackt und in einer MsgBox angezeigt
For i = 1 To ws.AutoFilter.Range.Columns.Count
str_ausgabe = str_ausgabe & Chr(13) & i & "Spalte:"
For u = 1 To ws.AutoFilter.Range.Rows.Count
str_ausgabe = str_ausgabe & " " & FeldArray(u, i)
Next u
Next i
MsgBox str_ausgabe, vbInformation, "Autofilterergebnisse"
End Sub

...nd Tschüss Kurt
Anzeige
AW: VBA Autofilter Index auslesen
th.heinrich
hallo John,
dieser Code kopiert die gefilterten werte und listet in den spalten die Filterkriterien auf.
Option Explicit

Sub FilterCriteria()
Dim intRow As Integer, intCol As Integer
intRow = Range("A1").CurrentRegion.Rows.Count + 2
intCol = 1
Do Until IsEmpty(Cells(1, intCol))
With ActiveSheet.AutoFilter.Filters(intCol)
If .On Then
Cells(intRow, intCol).Value = .Criteria1
End If
End With
intCol = intCol + 1
Loop
Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Cells(intRow + 1, 1)
End Sub

von Hans
gruss thomas
Anzeige
AW: VBA Autofilter Index auslesen
John
Danke an alle,
ihr gebt euch wirklich sehr viel Mühe.
Ihr seid einfach Spitze :-))
John
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA Autofilter Index auslesen in Excel


Schritt-für-Schritt-Anleitung

Hier ist eine einfache Schritt-für-Schritt-Anleitung, um den Index eines aktiven Autofilters in Excel mittels VBA auszulesen:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.

  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" > Einfügen > Modul.

  3. Füge den folgenden Code ein:

    Sub AutofilterIndexAuslesen()
       Dim ws As Worksheet
       Dim filterIndex As Integer
    
       ' Setze das Arbeitsblatt
       Set ws = ActiveSheet
    
       ' Überprüfe, ob ein Autofilter aktiv ist
       If ws.AutoFilterMode Then
           filterIndex = ws.AutoFilter.Filters(1).Criteria1
           MsgBox "Der aktive Filter Index ist: " & filterIndex
       Else
           MsgBox "Kein Autofilter aktiv."
       End If
    End Sub
  4. Führe den Code aus: Drücke F5 oder gehe über das Menü Run und wähle Run Sub/UserForm.

Mit diesen Schritten kannst Du den Index des Filters in der ersten Spalte des aktiven Arbeitsblatts auslesen.


Häufige Fehler und Lösungen

  • Fehler: "Kein Autofilter aktiv."

    • Lösung: Stelle sicher, dass Du einen Autofilter auf das Arbeitsblatt angewendet hast. Gehe zu Daten > Filter > Autofilter, um ihn zu aktivieren.
  • Fehler: "Index außerhalb des Bereichs."

    • Lösung: Überprüfe, ob die richtige Filternummer verwendet wird. Stelle sicher, dass Du die Filternummer in Filters(X) korrekt angibst.

Alternative Methoden

Es gibt verschiedene Möglichkeiten, um den Autofilter in VBA auszulesen:

  1. Verwendung einer Schleife:

    • Du kannst eine Schleife verwenden, um alle aktiven Filter zu überprüfen und deren Indizes auszulesen.
    Sub AlleFilterAuslesen()
       Dim ws As Worksheet
       Dim i As Integer
    
       Set ws = ActiveSheet
    
       If ws.AutoFilterMode Then
           For i = 1 To ws.AutoFilter.Filters.Count
               If ws.AutoFilter.Filters(i).On Then
                   MsgBox "Aktiver Filter: " & i
               End If
           Next i
       End If
    End Sub
  2. Kombination von Filtern:

    • Du kannst auch mehrere Filterbedingungen zusammenfassen und auslesen.

Praktische Beispiele

Hier sind einige Anwendungsbeispiele für den Autofilter in VBA:

  • Werte aus einem bestimmten Filter auslesen:

    Sub FilterWerteAuslesen()
       Dim ws As Worksheet
       Dim criteria As String
    
       Set ws = ActiveSheet
       criteria = ws.AutoFilter.Filters(2).Criteria1
    
       MsgBox "Der Filterwert in Spalte B ist: " & criteria
    End Sub
  • Ergebnisse in ein Array speichern:

    Sub FilterInArray()
       Dim ws As Worksheet
       Dim resultArray() As Variant
    
       Set ws = ActiveSheet
       resultArray = Application.Transpose(ws.AutoFilter.Range.Value)
    
       MsgBox "Erster Wert: " & resultArray(1, 1)
    End Sub

Tipps für Profis

  • Verwende Option Explicit: Damit stellst Du sicher, dass alle Variablen deklariert sind, was helfen kann, Fehler zu vermeiden.
  • Teste den Code schrittweise: Debugge Deinen Code mit F8, um zu sehen, wie er sich Zeile für Zeile verhält.
  • Nutze vba autofilter.range: Mit dieser Methode kannst Du gezielt Bereiche für den Filter definieren und die Daten besser steuern.

FAQ: Häufige Fragen

1. Wie kann ich den Autofilter für mehrere Spalten gleichzeitig auslesen?
Du kannst eine Schleife verwenden, um alle Filter in einem Bereich auszulesen, wie in der Schritt-für-Schritt-Anleitung beschrieben.

2. Gibt es eine Möglichkeit, den aktiven Filter zu entfernen?
Ja, Du kannst den aktiven Filter mit dem Befehl ActiveSheet.AutoFilterMode = False entfernen.

3. Wie kann ich die Filterkriterien in ein Array speichern?
Du kannst die Filterkriterien in ein Array speichern, indem Du die Werte der sichtbaren Zellen nach dem Anwenden des Filters durchläufst und sie in das Array überträgst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige