Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Ergebnisse des Autofilters als Variable speichern


Betrifft: Ergebnisse des Autofilters als Variable speichern von: Anka
Geschrieben am: 01.12.2017 11:44:14

Hallo liebe Leute,

ich möchte einen sehr großen Datensatz (166135 Zeilen) nach bestimmten Vorgaben filtern. Dafür habe ich mir ein Makro mit dem AutoFilter programmiert, worin insgesamt 7 Abfragefolgen getätigt werden.
Ich habe in einer Mappe eine Abfragemaske erstellt, in der man durch "Ja" und "Nein"-Antworten vorgeben kann, wonach gefiltert wird. Im Makro habe ich diese Abfragen immer mit "If"-Abfragen gemacht.
Z.B.
Wenn der Datensatz nach Wohngebäuden gefiltert werden soll, dann steht in der Abfragemaske "Wohngebäude" "Ja" und für die "Nichtwohngebäude" "Nein"

Im Makro steht, dann:
<-----------------------------------------------------
Definition der Quell-, Zieldatei und des Tabellenbereichs:

Dim wsQuelle As Worksheet 'Variable: Quelldatei anlegen
Dim wsZiel As Worksheet 'Variable: Zieldatei anlegen
Dim wsAuswahlmaske As Worksheet 'Variable: Tabelle "Auswahlmaske" anlegen
Dim rng_Tabellenbereich As Range 'Variable: Tabellenbereich anlegen
'Dim TextBox1 As TextBox

Set wsQuelle = Worksheets("Kopie Wärmeatlas") 'Variable: Quelldatei "Kopie Wärmeatlas festlegen
Set wsZiel = Worksheets("Zieltabelle") 'Variable: Zieldatei "Zieltabelle" festlegen
Set wsAuswahlmaske = Worksheets("Auswahlmaske") 'Variable: Auswahlmakse festlegen
Set rng_Tabellenbereich = wsQuelle.Range("$A$1:$W$166124") 'Variable: Tabellenbereich festlegen~f~


' Definitionen der Variablen für die Filterstufen 1-7
'
'*** Filter 1: Wohn- und Nichtwohngebäude

'* Definitionen Wohngebäude
Dim rng_filtern_Wohngebäude As Range 'Variable: "filtern_Wohngebäude" anlegen
Dim rng_Wohngebäude_Kriterium As Range 'Variable:"Wohngebäude_Kriterium" anlegen
Dim str_filtern_Wohngebäude As String 'Variable: "filtern_Wohngebäude" anlegen

Set rng_filtern_Wohngebäude = wsAuswahlmaske.Range("B5") 'Bezug von "filtern_wohngebäude" auf Zelle B5
Set rng_Wohngebäude_Kriterium = wsAuswahlmaske.Range("C5") 'Bezug von"Wohngebäude_Kriterium" auf Zelle C5
str_filtern_Wohngebäude = rng_Wohngebäude_Kriterium.Value() 'Variable Ja/Nein-Antwort

'* Definition Nichtwohngebäude
Dim rng_filtern_Nichtwohngebäude As Range 'Variable: "filtern_Nichtwohngebäude" anlegen
Dim rng_Nichtwohngebäude_Kriterium As Range 'Variable: "Nichtwohngebäude_Kriterium" anlegen
Dim str_filtern_Nichtwohngebäude As String 'Variable: "filtern_Nichtwohngebäude" anlegen

Set rng_filtern_Nichtwohngebäude = wsAuswahlmaske.Range("B6") 'Bezug von "filtern_Nichtwohngebäude" auf Zelle B6
Set rng_Nichtwohngebäude_Kriterium = wsAuswahlmaske.Range("C6") 'Bezug von"Nichtwohngebäude_Kriterium" auf Zelle C6
str_filtern_Nichtwohngebäude = rng_Nichtwohngebäude_Kriterium.Value() 'Variable "filtern_Nichtwohngebäude" auf Ja/Nein-Antwort

'*Filter anwenden:

'1) Wohngebäude: WG = "Ja", NWG = "Nein"
~f ~If str_filtern_Wohngebäude = "Ja" And str_filtern_Nichtwohngebäude = "Nein"
Then
rng_Tabellenbereich.AutoFilter , Field:=7, Criteria1:=Array( _
"Wochenendhaus", "Wohnhaus", "Wohnheim"), Operator:=xlFilterValues
End If '----------------------------------------------------------------------------------------------------------------------------------------

Das Problem:

1) Die Abfragemöglichkeiten (Ja-/ Nein-Antworten)sind aufgrund der 7 Filterstufen
sehr komplex, da mit jeder Abfrage die Kombination von Ja- und Nein Antworten
immer mehr wird.
--> oben habe ich nur nach Wohn- und Nichtwohngebäuden gefiltert. In der nächsten Abfrgestufe möchte ich diese Ergebnisse noch nach dem
Energieträger filtern, bei denen es 4 verschiedene Energieträger gibt. Dann müsste ich bspw. für jeden Energieträger eine If-Abfrage
nach Wohn- und Nichtgebäuden machen.
Danach sollen diese ERgebnisse wieder gefiltert werden, nämlich nach der Gebäudegröße, wobei ich wieder nach Wohn- und Nichtwohngebäuden
und den verschiedenen Energietäger unterscheiden .... Und so ziehen sich die Abfragen bis auf 7 Abfragen durch und die Unterscheidung
zwischen den Abfragemöglichkeiten werden immer mehr

2) Ich müsste das Ergebnis der ersten If-Abfrage (If-Abfragen beinhalten den
Autofilter) als Variable speichern, um auf dieses Ergebnis die nächste If-Abfrage
(bzw den nächsten Filter) zu legen.
z.B. If Ergebnis Filter_Wohngebäude = .... dann mach damit das...."

Meine Frage ist also:

Wie kann ich die Filterabfragen vereinfachen? Kann mann die Ergebnisse aus jeder Abfrage (Autofilter mit if-Funktion) als Variable speichern, mit der ich dann weiter filtern kann??

Vielen Dank für Eure Hilfe!

Liebe Grüße,

Anka

  

Betrifft: AW: Ergebnisse des Autofilters als Variable speichern von: onur
Geschrieben am: 01.12.2017 17:52:30

Wenn du das Ergebnis eines Filters in eine variable packen würdest, hättest du ein array.
du kannst aber nicht ein array am stück mit einer If-Abfrage testen, höchstens jedes element einzeln.
Poste doch mal eine Beispieldatei mit ein paar hundert Datensätzen. Da gibt es bestimmt einfachere möglichkeiten.


  

Betrifft: AW: Ergebnisse des Autofilters als Variable speichern von: Sepp
Geschrieben am: 02.12.2017 08:26:58

Hallo Anka,

versuche es mal mit den benutzerdefinierten Ansichten. Ribbon 'Ansicht' > 'Hinzufügen' >, Name vergeben und den Haken bei 'Ausgeblendete Zeilen-, Spalten- und Filtereinstellungen' setzen > OK

So kannst du für jede Filtereinstellung eine eigene Ansicht erstellen und bei Bedarf aufrufen.

Gruß Sepp



  

Betrifft: AW: Ergebnisse des Autofilters als Variable speichern von: Anka
Geschrieben am: 02.12.2017 13:23:22

Hallo Sepp,

vielen Dank für Deine Antwort!

Ich verstehe nur leider nicht was Du meinst. Meinst Du, ich soll gar kein VBA benutzen und stattdessen den Datenfilter von Excel mit der benutzerdefinierten Ansicht benutzen?

Gruß,
Anna


  

Betrifft: AW: Ergebnisse des Autofilters als Variable speichern von: Sepp
Geschrieben am: 02.12.2017 13:56:35

Hallo Anka oder Anna?

Ja genau, du stellst deinen gewünschten Filter ein und speicherst die Ansicht, mit dieser Ansicht kannst du den Filter jederzeit wieder aufrufen.

Gruß Sepp



  

Betrifft: AW: Ergebnisse des Autofilters als Variable speichern von: Anka
Geschrieben am: 04.12.2017 09:17:43

Hallo Sepp,

danke für Deine Antwort. Leider ist das so wie meinst nicht möglich. Denn ich möchte ja einen dynamischen Filter, der- je nachdem was ich filtern möchte- meine Ergebnisse in einer Zieltabelle ausspuckt, ohne bspw beim Datenfilter verschiedene Einstellungen vornehmen zu müssen (bspw. dass nach einem Wert größer als 1000 gefiltert werden soll).

Ich bräuchte eine Funktion mit der ich meine gefilterten Ergebnisse immer in die nächste Filterabfrage mitnehmem kann, ähnlich wie bei einem "loop". Dadruch wird meine Datentabelle immer kürzer, denn im Moment filtert er mir nur die Orginaltabelle nach einer Bedingung und dann wieder die Originaltabelle nach einer neuen Bedingung.

Weist du da eine Formel oder eine einfachere Möglichkeit als sehr viele If-Abfragen zu erstellen?

Gruß,

Anka


  

Betrifft: AW: Ergebnisse des Autofilters als Variable speichern von: Anka
Geschrieben am: 04.12.2017 09:42:02

Hallo liebe Helfer,

ich kann Euch meine Datei hier leider nicht reinstellen, da sie nach Löschen aller Zeilen und ohne Makros immer noch 900kB groß ist und ich nur 300kB hochladen kann.

Liebe Grüße,

Anka


Beiträge aus den Excel-Beispielen zum Thema "Ergebnisse des Autofilters als Variable speichern"