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

Forumthread: Array nach eindeutige Zeilen filtern

Array nach eindeutige Zeilen filtern
01.02.2021 12:53:05
Kay
Hallo,
nach dem Excel 365 so viele schöne Array Funktionen wie Filtern, Sortieren und Eindeutig besitzt, grübel ich nun, wie ich das auch einfach in VBA mit daten Array's schnell und effizient durchführen kann..
Ich lese eine Tabelle mit 1000 Zeilen ein. Das funktioniert ja am schnellsten, wenn ich der Variable in Excel bereits gesetzten Namensbereich zuordne.
Dim aDaten
Dim aDaten_relevant

aDaten = [MeinBereich] 'wie kann ich diesen Daten bereits gefiltert einlesen?
Jetzt möchte ich diese gefilterte Datenmenge nach eindeutigen Spaltenkombinationen wiederum filtern.
aDaten_relevant = Alle eindeutigen Kombinationen aus Spalte 1, 5, 9
Als Ergebnis sollte dann aDaten_relevant nur noch diese 3 Spalten mit eindeutigen Zeilen enthalten.
Was mir in Excel Dank Formelwerk ziemlich einfach gelingt, verschafft mir in VBA leider Kopfzerbrechen.
Vielleicht hat jemand ja einen Lösungsansatz, wie man Daten relativ einfach aus einem Datenbereich in Excel gefiltert und gruppiert über mehrere Spalten als eindeutige Zeilen in einen array einliest.
Danke und Gruß
Kay
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array nach eindeutige Zeilen filtern
01.02.2021 13:20:02
Daniel
Hi
früher konne man mit WORKSHEETFUNCTION.Function die Excelfunkionen auch innerhalb von VBA verwenden.
wenns darum ging, ganze Formeln direkt in VBA berechnen zu lassen, konnte man EVALUATE einsetzen mit
Ergebnis = Evaluate("xxx")

wobei "xxx" der Formeltext in englischer Schreibweise mit A1-Zellbezügen sein muss
klappt das mit den neuen Funktionen nicht mehr?
Gruß Daniel
Anzeige
AW: Array nach eindeutige Zeilen filtern
01.02.2021 15:37:43
Kay
Hi Daniel,
super, das klappt ja blendend. Somit kann ich endlich die Daten effizient laden.
Unabhängig von dieser effizienten Lösung kann es ja mal sein, dass man in VBA Daten aus arrays filtern oder verdichten möchte, siehe wie oben beschrieben. Gibt es hierzu VBA Befehle oder geht man da wirklich Zeilen/Spalten durch so ein array dann durch und vergleicht die einzelnen Datenzellen?
Danke und Gruß
Kay
Anzeige
AW: Array nach eindeutige Zeilen filtern
01.02.2021 15:52:01
Daniel
Hi
schleifen über Arrays sind jetzt nicht so das Problem, die sind auch in VBA schnell genug, so dass man jetzt nicht für alles eine vorgefertigte Spezialfunktion braucht sondern sich auch mal selber was programmieren kann.
fürs Duplikate-Vermeiden kann man auch das Dictionary-Element verwenden (ein eindimensionales Array mit einem Freitext-Index)
Gruß Daniel
Anzeige
AW: Array nach eindeutige Zeilen filtern
01.02.2021 16:01:25
Rudi
Hallo,
z.B.
Sub aaaa()
Dim objDic As Object, oObj
Dim a1, a2()
Dim i As Long, j As Long
Set objDic = CreateObject("scripting.dictionary")
a1 = Cells(1, 1).CurrentRegion
For i = 1 To UBound(a1)
objDic(Join(Array(a1(i, 1), a1(i, 5), a1(i, 9)), "|")) = 0
Next i
ReDim a2(1 To objDic.Count, 1 To 3)
For Each oObj In objDic
j = j + 1
a2(j, 1) = Split(oObj, "|")(0)
a2(j, 2) = Split(oObj, "|")(1)
a2(j, 3) = Split(oObj, "|")(2)
Next oObj
Worksheets.Add.Cells(1, 1).Resize(UBound(a2), 3) = a2
End Sub

Gruß
Rudi
Anzeige
AW: Array nach eindeutige Zeilen filtern
01.02.2021 16:54:13
Kay
Super - danke

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Eindeutige Zeilen in Excel Arrays filtern


Schritt-für-Schritt-Anleitung

Um in Excel eindeutige Zeilen aus einem Datenarray zu filtern, kannst Du die folgenden Schritte befolgen. Diese Methode ist besonders nützlich, wenn Du die neuen Array-Funktionen von Excel 365 nutzt.

  1. Daten einlesen: Verwende VBA, um Deine Daten aus einem benannten Bereich einzulesen. Beispiel:

    Dim aDaten
    aDaten = [MeinBereich]
  2. Eindeutige Kombinationen filtern: Nutze ein Dictionary-Objekt, um die eindeutigen Zeilen zu speichern. Beispielcode:

    Sub EindeutigeZeilenFiltern()
       Dim objDic As Object, oObj
       Dim a1, a2()
       Dim i As Long, j As Long
       Set objDic = CreateObject("scripting.dictionary")
       a1 = Cells(1, 1).CurrentRegion
    
       For i = 1 To UBound(a1)
           objDic(Join(Array(a1(i, 1), a1(i, 5), a1(i, 9)), "|")) = 0
       Next i
    
       ReDim a2(1 To objDic.Count, 1 To 3)
       For Each oObj In objDic
           j = j + 1
           a2(j, 1) = Split(oObj, "|")(0)
           a2(j, 2) = Split(oObj, "|")(1)
           a2(j, 3) = Split(oObj, "|")(2)
       Next oObj
       Worksheets.Add.Cells(1, 1).Resize(UBound(a2), 3) = a2
    End Sub
  3. Ergebnis anzeigen: Das Ergebnis wird in einem neuen Arbeitsblatt angezeigt, mit nur den eindeutigen Zeilen aus den Spalten 1, 5 und 9.


Häufige Fehler und Lösungen

  • Fehler: "Typen-Inkompatibilität"
    Lösung: Stelle sicher, dass alle verwendeten Variablen korrekt deklariert sind. Beispielsweise sollten Arrays, die Du verwendest, die richtige Dimension haben.

  • Fehler: "Objekt nicht gefunden"
    Lösung: Überprüfe, ob der benannte Bereich korrekt definiert ist und sich auf die richtigen Daten bezieht.


Alternative Methoden

Wenn Du Excel 365 verwendest, kannst Du auch die Funktion EINDEUTIGE direkt im Arbeitsblatt nutzen. So kannst Du ohne VBA eindeutige Werte in mehreren Spalten filtern. Beispiel:

=EINDEUTIGE(A1:C100)

Diese Funktion ermöglicht es Dir, mehrere Kriterien gleichzeitig zu berücksichtigen und gibt die eindeutigen Zeilen zurück.


Praktische Beispiele

Angenommen, Du hast eine Tabelle mit Verkaufsdaten und möchtest die eindeutigen Kombinationen aus den Spalten für Produkt, Verkäufer und Region ermitteln. Verwende den oben beschriebenen VBA-Code, um die Daten zu filtern und die eindeutigen Kombinationen in ein neues Arbeitsblatt zu übertragen.


Tipps für Profis

  • Verwende immer ein Dictionary, wenn Du mit großen Datenmengen arbeitest, um die Leistung zu erhöhen, insbesondere wenn Du Duplikate vermeiden möchtest.
  • Bei komplexen Datensätzen kann es hilfreich sein, die Daten zuerst zu sortieren, bevor Du die eindeutigen Werte extrahierst.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Kriterien in VBA filtern?
Verwende ein Array, um die Kriterien zu speichern und vergleiche diese beim Durchlaufen der Daten.

2. Ist es möglich, die Ergebnisse direkt in eine bestehende Tabelle einzufügen?
Ja, Du kannst den Code so anpassen, dass die Ergebnisse in eine bestehende Tabelle eingefügt werden, anstatt ein neues Arbeitsblatt zu erstellen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige