Anzeige
Archiv - Navigation
1560to1564
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA ListObject mit AutoFilter in Array

VBA ListObject mit AutoFilter in Array
02.06.2017 18:50:44
Christian
Hallo Leute,
leider komme ich mit einer Pivottabelle nicht zum gewünschten Ergebnis, daher der Versuch über VBA....
Es gibt zwei Sheets, wovon das eine die Daten hält (Sheet1) und in dem Anderen die Daten aufbereitet ausgegeben werden sollen (Sheet2).
Sheet1 enthält eine Liste namens "Auftragsabarbeitung" mit den folgenden Spalten mit _ fiktiven Werten zur Veransachaulichung:

Datum, Auftrag, Stunden, Anlage, iO, niO
30.05.2017, jkf, 8:23, d, 13034, 18
31.05.2017, abc, 3:20, a, 1030, 2
31.05.2017, grf, 0:10, c, 84, 5
31.05.2017, ret, 1:57, b, 2053, 3
31.05.2017, jkf, 8:23, d, 13034, 18
31.05.2017, abc, 2:20, g, 770, 1
31.05.2017, ret, 7:48, b, 13039, 31
01.06.2017, abc, 7:48, a, 13039, 3
01.06.2017, ret, 7:48, b, 13039, 1
01.06.2017, abc, 5:02, a, 8785, 0
01.06.2017, ret, 7:48, b, 13039, 6
02.06.2017, abc, 8:37, a, 16547, 5

Die Anlagen melden selbst Ihre Produktionszeit in diese Liste, wodurch die Liste bis zum Neuanlegen immer länger wird.
Sheet2 soll die Auswertung anhand eines in Zelle B2 eingetragenen Datums aus Sheet1 mit Klick auf den AktualisierenButton erstellen. Hier mus keine Liste erstellt werden, es reicht ein ganz normaler Bereich.
Dabei ist folgende Form gewünscht:
Datum: 31.05.2017   [AktualisierenButton]
Anlage, Auftrag, Stunden, iO, niO
a    abc, 3:20, 1030, 2
b    ret, 1:57, 2053, 3
ret, 2:20, 770, 1
ret, 7:48, 13039, 31
c    grf, 0:10, 84, 5
d    jkf, 8:23, 13034, 18

Mein Ansatz war nun, zu erst das ListObject in Sheet1 mit dem Datum in Sheet2.Range("B2").Value zu filtern, was auch soweit klappt.
Sheets(1).ListObjects("Auftragsabarbeitung").Range.AutoFilter Field:=1, _
Criteria1:=Format(Sheets(2).Range("B2").Value, "dd.mm.yyyy"), Operator:=xlAnd
Aus dem gefilterten ListObject wollte ich nun die Anlagen in ein Array kopieren. Dabei wird mir aber leider der gesamte Inhalt der Spalte Anlage im ListObjects in das Array kopiert und nicht nur der gefilterte Bereich.
Dim userArr As Variant
userArr = Sheets(1).Range("Auftragsabarbeitung[Anlage]").Value
An dieser Stelle scheitere ich Leider.
Gefiltert werden mir 56 Zeilen angezeigt, im Array befinden sich am Ende 800+.
Als nächstes wollte ich dann alle doppelten Werte im Array entfernen.
Dann das Array durchlaufen und zu jedem Eintrag die entsprechenden Zeilen aus dem nach Datum gefilterten ListObject aus Sheet1 an das Ende von Sheet2 anfügen.
Ist kein Eintrag mehr zum Array Element in der Liste vorhanden, wird eine Leerzeile eingefügt.
Vielleicht geht mein Vorhaben ja auch irgendwie einfacher umzusetzen.
Danke schon mal für jede Art von Unterstützung und Tipps ;-)
Gruß Chris

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nicht ganz nachvollziehbar, Beispiel inkonsistent
03.06.2017 12:31:02
Zwenn
Hallo Chris,
sofern ich es richtig verstanden habe, willst Du eine Art Zusammenfassung pro Anlage in Sheet2 für einen bestimmten Tag durchführen, wobei die Spalten in einer anderen Reihenfolge angeordnet werden. Leider kann ich anhand Deiner Beispieldaten nicht genau nachvollziehen, ob ich mit meiner Einschätzung richtig liege.
Für Anlage a bildest Du im Ergenis Deines Beispiels eine Zeile ab. Schaut man in die Beispiel-Ausgangsdaten, ist das genau die eine Zeile, die sich zum angegebenen Datum 31.05.2017 auch im Bereich 31.05.2017 befindet.
Für Anlage b gibt es im Ergebnis dann 3 Zeilen. In den Ausgangsdaten gibt es für den 31.05.2017 aber nur 2 von diesen Zeilen für Anlage b. Woher kommt die mittlere Zeile?
Für Anlage c ist wieder nur eine Zeile vorhanden, die sich in den Ausgangsdaten im Bereich des 31.05.2017 wiederfindet.
Für Anlage d sind die Beispieldaten ungünstig gewählt. Man kann nicht nachvollziehen, ob es sich um die Zeile vom 30.05.2017 oder die gleiche Zeile vom 31.05.2017 handelt.
Zusätzlich taucht in den Ausgangsdaten eine Anlage g auf. Soll das die mittlere Zeile von Anlage b sein und ist nur ein Vertipper? Dann stimmt die Ergebniszeile aber auch nicht. Denn dort steht für Auftrag ret, während in den Ausgangsdaten abc hinterlegt ist.
Ich würde für die Lösung Deines Problems gar nicht über den Filter gehen. Ich würde alle Zeilen, die zum gewünschten Datum gehören einfach in ein Array übernehmen und die Daten dann den vorhandenen Anlagen zuordnen, diese also einfach an den entsprechenden Stellen in Sheet2 wieder ausgeben.
Du solltest für solche Probleme eine Beispieldatei hochladen, die so viele Daten enthält, dass man damit arbeiten kann. Die Datei sollte auch mindestens ein Beispiel enthalten, wie ein Ergebnis aussehen soll. Auch wenn Du die Daten ja eigentlich zur Verfügung gestellt hast, fast niemand hier ist bereit, eine Datei erst nachzubauen. Dabei besteht am Ende immer die Gefahr, dass irgend etwas doch anders ist, als in deiner Ausgangslage. Das führt dann nur zu Nacharbeit, die man sich von vorn herein sparen kann. Abgesehen davon hast Du ja schon Code geschrieben. Diesen enthältst Du uns aber bis auf ein paar zusammenhanglose Zeilen vor.
Ist also alles nicht böse gemeint von mir :-)
Viele Grüße,
Zwenn
Anzeige
AW: Nicht ganz nachvollziehbar, Beispiel inkonsistent
03.06.2017 19:41:16
Gerd
Hallo Chris,
im Prinzip kannst du dies so machen:
Tabelle10.ListObjects(1).Range.SpecialCells(xlCellTypeVisible).Copy
Tabelle11.Cells(1, 8).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Die Spalten müssen dann noch aufbereitet u. sortiert werden.
Gruß Gerd

350 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige