Autofilter: Gefilterte Datensätze auslesen

In diesem Artikel erläutern wir, wie sich der über einen Autofilter gefilterte Inhalt aus einer Liste auslesen lässt.

Als Ausgangsbasis dient wieder einmal eine Artikelliste mit etwas mehr als 25 Einträgen und einer Überschriftenzeile, in der sich der Autofilter befindet, siehe Abbildung 1.


Abb. 1

Ziel ist nun, die gefilterten Einträge in einer separaten Zelle auszulesen. Filtern wir dazu zunächst die Tabelle in Spalte C auf Werte über 85. Es werden damit nur noch drei Datensätze angezeigt, alle anderen Datensätze werden ausgeblendet, siehe Abbildung 2.


Abb. 2

Um nun diese drei Werte in einer separaten Zelle darzustellen, benötigen wir eine benutzerdefinierte Funktion (UDF). Erfassen Sie dazu den folgenden Code in einem Code-Modul.

Public Function FILTERERGEBNIS(rngBereich As Range, _
  Optional trenner = vbLf) As String
'** Auslesen der gefilterten Daten
'** Parameter 1: Zellbereich
'** Parameter 2: Startzeile des Datenbereichs (ohne Überschrift)
'** Parameter 3: Optional - Individueller Daten-Trenner
'****************************************************************************

'** Dimensionierung der Variablen
Dim varArr As Variant
Dim objDic As Object
Dim intI As Integer
Dim lngL As Long
Dim lngStartZ As Long

'** Bereich übergeben
varArr = rngBereich

'** Objekt definieren
Set objDict = CreateObject("Scripting.Dictionary")

'** Startzeile der Liste aus Bereichsangabe auslesen
lngStartZ = rngBereich(1, 1).Row

'** Datenbereich durchlaufen
For intI = LBound(varArr, 2) To UBound(varArr, 2)
  For lngL = LBound(varArr, 1) To UBound(varArr, 1)
    '** Prüfen, ob Zeile eingeblendet ist
    If Cells(lngL + lngStartZ - 1, 1).Rows.Hidden = False Then
      '** Inhalt dem Dictionary-Objekt übergeben
      objDict(varArr(lngL, intI)) = 0
    End If
  
  Next
Next

'** Inhalte zusammensetzen und der Funktion zurückgeben
FILTERERGEBNIS = Join(objDict.keys, trenner)

End Function

So wird die Funktion verwendet:

  • Erfassen Sie die neue benutzerdefinierte Funktion in einer Zelle, bspw. Zelle E3: =FILTERERGEBNIS(B5:B31;5;" - ")
  • Als erster Parameter wird die Bereichsangabe übergeben, also der Listenbereich, der ausgelesen werden soll. Im Beispiel also die Artikelbezeichnung aus dem Zellbereich B5:B31.
  • Der zweite Parameter ist optional. Damit kann ein Trennzeichen wischen den einzelnen Werten übergeben werden. Im Beispiel wurde der Parameter " - " übergeben, so dass ein Minuszeichen mit vor- und nachgestelltem Leerzeichen an die einzelnen Daten angehängt wird. Wenn dieser Parameter nicht übergeben wird, werden die einzelnen Zellinhalte einfach nacheinander geschrieben.

Als Ergebnis werden die Bezeichnungen der drei gefilterten Datensätze in Zelle E3 eingetragen, siehe Abbildung 3.


Abb. 3

Sobald nun der Filter geändert wird und andere Datensätze in der Artikelliste angezeigt werden, wird die Auflistung in Zelle E3 dementsprechend angepasst. Damit befinden sich in Zelle E3 immer sämtliche gefilterte Datensätze, die dann entsprechend weiter verwendet werden können.

Die Beispieldatei können Sie über den folgenden Link herunterladen.