Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Mehrdimensionales Array in meheren Spalten filtern

Forumthread: Mehrdimensionales Array in meheren Spalten filtern

Mehrdimensionales Array in meheren Spalten filtern
16.09.2016 13:43:23
Dennis
Hallo Zusammen,
ich hoffe ihr könnt mir bei folgendem Problem helfen: Ich habe aktuell eine Tabelle die via VBA und Autofilter-Funktion nach einer variable gefiltert wird. Diese Variable kann entweder in Zeile 2,3 oder 4 gesucht werden das habe ich über eine Combobox in einem Userform erledigt.
Da ich das ganze etwas schneller machen wollte, habe ich nun die Tabelle in einem mehrdimensionalen Array abgebildet:
Option Explicit
Global varmyarray As Variant
Sub array_einlesen()
Dim x As Long
x = AnzahlZeilen(Worksheets("Gesamt"))
varmyarray = Sheets("gesamt").Range("A2:Q" & x).Value
End Sub

Function AnzahlZeilen(Blatt As Worksheet) As Long
AnzahlZeilen = WorksheetFunction.CountA(Blatt.Range("A:A"))
End Function
In einem Userform lasse ich dieses komplette Array in einer Listbox ausgeben, das klappt auch soweit. Nur möchte ich jetzt halt noch das ich z.B. in der 2. Spalte (hier steht eine Artikelnummer) alle Artikelnummern samt infos aus den anliegenden spalten filtere in ein separates Array schreibe. Dieses Array möchte ich dann in einer anderen Listbox ausgeben.
Leider finde ich überall nur Anleitungen für eindimensionale Arrays. Kann man das dennoch irgendwie realisieren ?
Gruß
Dennis
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Beispieldatei?
16.09.2016 16:43:05
Michael
Hi Dennis,
in diesem Fall würde ich nicht die Hand dafür ins Feuer legen, daß Arrays, in denen man händisch Daten herumschaufelt, wirklich schneller sind als Excels Autofilter.
Man könnte den gefilterten Bereich "irgendwo" hinkopieren und von dort aus in ein Array übernehmen, das geht sicher ratz-fatz.
Um die Geschichte im Einzelnen beurteilen zu können, wäre ne Beispieldatei ganz gut und eine Angabe, um wieviele Daten es sich überhaupt handelt.
Schöne Grüße,
Michael
Anzeige
;
Anzeige

Infobox / Tutorial

Mehrdimensionales Array in mehreren Spalten filtern


Schritt-für-Schritt-Anleitung

Um ein mehrdimensionales Array in mehreren Spalten zu filtern, kannst du die folgenden Schritte ausführen:

  1. Array einlesen: Verwende die array_einlesen-Subroutine, um die Daten aus deinem Arbeitsblatt in ein mehrdimensionales Array zu laden.

    Sub array_einlesen()
       Dim x As Long
       x = AnzahlZeilen(Worksheets("Gesamt"))
       varmyarray = Sheets("gesamt").Range("A2:Q" & x).Value
    End Sub
  2. Anzahl der Zeilen bestimmen: Nutze die AnzahlZeilen-Funktion, um die Anzahl der nicht leeren Zeilen in der ersten Spalte zu zählen.

    Function AnzahlZeilen(Blatt As Worksheet) As Long
       AnzahlZeilen = WorksheetFunction.CountA(Blatt.Range("A:A"))
    End Function
  3. Filtern des Arrays: Erstelle eine neue Subroutine, die das Array mit den gewünschten Kriterien filtert und die gefilterten Werte in ein neues Array speichert.

    Sub FilterArray()
       Dim i As Long, j As Long
       Dim filteredArray() As Variant
       Dim filterValue As String
       Dim count As Long
    
       filterValue = "DeinSuchwert" ' Hier den Filterwert anpassen
       count = 0
    
       For i = LBound(varmyarray, 1) To UBound(varmyarray, 1)
           If varmyarray(i, 2) = filterValue Then
               count = count + 1
               ReDim Preserve filteredArray(1 To count, 1 To UBound(varmyarray, 2))
               For j = LBound(varmyarray, 2) To UBound(varmyarray, 2)
                   filteredArray(count, j) = varmyarray(i, j)
               Next j
           End If
       Next i
    
       ' Ausgabe in eine Listbox kann hier erfolgen
    End Sub

Häufige Fehler und Lösungen

  • Fehler: Array außerhalb der Grenzen: Wenn du versuchst, auf ein Element des Arrays zuzugreifen, das nicht existiert, kann dies zu einem Laufzeitfehler führen. Stelle sicher, dass du die Indizes korrekt verwendest.

  • Lösung: Indizes überprüfen: Überprüfe die Grenzen des Arrays mit LBound und UBound, um sicherzustellen, dass du innerhalb der gültigen Bereiche arbeitest.

  • Fehler: Falsche Filterbedingungen: Wenn das gefilterte Array leer bleibt, kann das an falschen Vergleichsoperatoren oder an falschen Werteinstellungen liegen.

  • Lösung: Filterwerte anpassen: Stelle sicher, dass der Filterwert korrekt gesetzt ist und mit den Daten im Array übereinstimmt.


Alternative Methoden

Wenn du mit mehrdimensionalen Arrays nicht zurechtkommst, gibt es einige alternative Methoden, um Daten in Excel zu filtern:

  • Autofilter verwenden: Du kannst die integrierte Autofilter-Funktion von Excel nutzen, um die Daten direkt auf dem Arbeitsblatt zu filtern und dann die gefilterten Daten in ein Array zu kopieren.

  • Pivot-Tabellen: Eine Pivot-Tabelle kann eine leistungsfähige Möglichkeit sein, um komplexe Daten zu aggregieren und zu analysieren, ohne direkt mit Arrays arbeiten zu müssen.


Praktische Beispiele

Hier ist ein praktisches Beispiel, wie du ein mehrdimensionales Array in Excel filtern kannst:

Sub BeispielFiltern()
    Call array_einlesen
    Call FilterArray
End Sub

Stelle sicher, dass du den Filterwert im FilterArray anpasst. Wenn deine Datenbank umfangreich ist, kann die Verwendung von Arrays die Leistung verbessern, da du nur relevante Daten verarbeitest.


Tipps für Profis

  • Effizienz steigern: Wenn du mit großen Datenmengen arbeitest, kann die Arbeit mit Arrays die Geschwindigkeit erhöhen. Vermeide es, die Arbeitsmappe während der Verarbeitung zu aktualisieren, um die Leistung zu optimieren.

  • Debugging: Nutze die Debug.Print-Anweisung, um Werte während der Schleifen zu überprüfen und Fehler schnell zu identifizieren.

  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um unerwartete Laufzeitfehler abzufangen und zu behandeln.


FAQ: Häufige Fragen

1. Wie kann ich die Größe des Arrays dynamisch anpassen?
Du kannst die Größe des Arrays mit ReDim Preserve anpassen, um sicherzustellen, dass die vorhandenen Daten nicht verloren gehen.

2. Kann ich die Filterkriterien dynamisch setzen?
Ja, du kannst die Filterkriterien aus einer Userform oder einer Zelle beziehen, um die Flexibilität zu erhöhen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige