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