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.