HERBERS Excel-Forum - das Archiv
AutoFilter-Auswahlliste per VBA auslesen
Horst

Hallo liebe Excelperten,
ist es möglich, per VBA die Liste auszulesen, die man angezeigt bekommt, wenn man auf den kleinen Pfeil am Kopf einer Spalte mit AutoFilter klickt? Dort stehen ja die Unikate der in der Spalte vorkommenden Werte. Will man diese bei einer sehr langen Tabelle (50.000 Zeilen) per VBA ermitteln, dauert das erheblich länger als Excel für den AutoFilter braucht.

AW: AutoFilter-Auswahlliste per VBA auslesen
ChristianM

Hallo,
mein Vorschlag: nimm den Spezialfilter und lass dir das Ergebnis in einem anderen Sheet oder wo auch immer ausgeben.
btw: Autofilter zeigt dir nur die ersten 1000 Einträge...
Gruß Christian

AW: AutoFilter-Auswahlliste per VBA auslesen
Horst

Christian,
danke für die schnelle Antwort. Das Problem mit den 1.000 Anzeigen bei AutoFilter ist eher nicht relevant, da zwar viele Zeilen in der Tabelle sind, aber die eindeutigen Werte weit unter 1.000 liegen. Mit dem Spezialfilter habe ich das auch schon versucht, da das Ganze aber über 62 Spalten durchgeführt werden soll, dauert es einfach zu lange. Beim Autofilter werden die in der DropDownListe angezeigten Werte ja offenbar über den Wert Field angesprochen - den müsste man doch auch per VBA ermitteln können?

AW: AutoFilter-Auswahlliste per VBA auslesen
Nepumuk

Hallo Horst,
Field ist ein ganzzahliger Parameter der Autofilter-Methode zum ansteuern der ensprechenden Spalte im Autofilter. Von dem kannst du nichts zurückerwarten. Und von der Methode auch nicht, denn die hat, wie die meisten Methoden, keinen Rückgabewert.
Kurz und gut, du kommst an die Liste nicht heran.
Und wenn du einen Blick ins Archiv gewagt hättest, dann müsstest du nicht umsonst nachfragen. Denn das wurde schon mehrfach erklärt.
Gruß
Nepumuk

AW: AutoFilter-Auswahlliste per VBA auslesen
Horst

Das Ergebnis soll wieder in einer Auswahlliste in einer UserForm verwendet werden.

AW: AutoFilter-Auswahlliste per VBA auslesen
Rudi

Hallo,
das sollte gehen:


Function myList(sh As Worksheet, lngCol As Long)
Dim vntList(), n As Long, vntC, vntTmp
Dim myCol As New Collection
With sh
ReDim vntList(1 To 1, 1 To Application.CountA(.Columns(lngCol)))
vntTmp = .Range(.Cells(1, lngCol), .Cells(Rows.Count, lngCol).End(xlUp))
End With
For Each vntC In vntTmp
Err.Clear
On Error Resume Next
myCol.Add vntC, CStr(vntC)
If Err.Number = 0 Then
n = n + 1
vntList(1, n) = vntC
End If
Next
ReDim Preserve vntList(1 To 1, 1 To n)
myList = WorksheetFunction.Transpose(vntList)
End Function


Private Sub UserForm_Initialize()
ComboBox1.List = myList(Sheets(1), 1)
End Sub

Gruß
Rudi

AW: AutoFilter-Auswahlliste per VBA auslesen
Horst

Hallo Rudi,
tausendfachen Dank! Die Funktion hat uns bei einem totalen Engpass enorm weitergeholfen. Das geht ja selbst bei 45.000 Zeilen, die alle unterschiedliche Werte enthalten, wie der Blitz.
Gruß
Horst

AW: AutoFilter-Auswahlliste per VBA auslesen
Gernot

Hi,
wo/wie soll denn das Ergebnis ausgegeben werden?
mfg Gernot