Herbers Excel-Forum - das Archiv
Teilergebnisse einer Tabelle mit VBA kopieren

|
Betrifft: Teilergebnisse einer Tabelle mit VBA kopieren
von: Norbert
Geschrieben am: 13.12.2003 20:50:21
Hallo liebe Forumleute!
Kann mir bitte jemand weiterhelfen??!!
Es geht um folgendes:
Nepomuk vom Forum hat mir bereits viel geholfen. Aber in seinem Skript funktioniert eine Anweisung nicht so wie ich mir das vorgestellt habe.
In einem VBA-Skipt sortiere und berechne (Daten/Teilergebnisse/Unter Verwendung von Summe) ich Werte in einem Tabellenblatt, in dem sich viele Daten befinden und immer wieder Daten hinzukommen. Dann verwende ich noch den Autofilter (in Zeile 1) zum Filtern.
Dann lasse ich einen „Zeilenzähler“ laufen, der die Zeilen bis zur ersten Leerzeile in Spalte F zählt.
Danach lasse ich eine Schleife (von 2 bis „Zeilenzähler“) laufen, in der ich in der Spalte I und M nach gewissen Einträgen suche.
Das funktioniert so recht gut, aber Excel-VBA zählt nach dem Erstellen der Teilergebnisse und nach der Autofilterung ALLE Zeilen durch; so bekomme ich einen wertmäßig sehr großen „Zeilenzähler“, obwohl am Tabellenblatt vielleicht durch den Autofilter nur mehr wenige Zeilen überbleiben.
Das Problem ist nun klar: Wenn ich also mal eine Zeilenzahl von z.B. 2000 habe und dann Autofiltere, und danach nur mehr vielleicht 60 Zeilen sichtbar sind, weil genau diese mich interessieren, werden trotzdem 2000 Zeilen gezählt und die for-Schleife wird 2000 mal durchlaufen! Das dauert dann immer länger.
ACHTUNG: Wie bereits oben erwähnt erstelle ich nach der Autofilterung auch noch TEILERGEBNISSE (Daten/Teilergebnisse/Unter Verwendung von Summe)!!
Mit Nepomuks Skript erspare ich mir die Schleife zum Zeilenzählen und ich sollte den TEILERGEBNIS-GEFILTERTEN Bereich in ein neues Arbeitsblatt kopieren können, der nach der Filterung UND DER TEILERGEBINS-Erstellung übrig bleibt. Die Teilergebnis-Funktion in Excel liefert mir aber in Spalte F gewisse Teilergebnisse:
Z.B. steht dort: AB Ergebnis, weil AB eine Filtermöglichkeit ist; x-Zeilen darunter
CD Ergebnis, weil CD auch eine weitere Filtermöglichkeit ist usw.
Genau so will ich das auch, aber mit der Kopieranweisung in Nepomuks Skript werden nur die Zeilen bis zum ersten Teilergebnis (z.B. AB Ergebnis) markiert (selektiert).
Wie kann ich nun ALLE sichtbaren Zeilen (eben nach der Teilergebnis-Erstellung und Filterung) MIT DEN TEILERGEBNIS-Texten (wie z.B. AB Ergebnis) selektieren?
Mein Taberllenblatt nach der Filterung und der Erstellung der Teilergebnisse sieht z.B. so aus:
https://www.herber.de/bbs/user/2449.xls
Ich bitte auch um genaue (verständliche) Skriptangabe, weil ich mich in VBA noch nicht gut auskenne. Die Skriptteile unten sind großteils auch von Forumteilnehmern, die mir sehr weitergeholfen haben.
Nepomuks Skript:
Public
Sub test()
Dim varArray As Variant
Application.ScreenUpdating = False
Range("A1").Select
Range(Range("A2:C2"), Selection.End(xlDown)).Copy --- Hier werden “zuwenig” Zeilen selektiert!!
Workbooks.Add
Range("A1").PasteSpecial xlPasteAll
varArray = ActiveSheet.UsedRange
ActiveWorkbook.Close False
Application.ScreenUpdating = True
End Sub
Danke im Voraus
LG
Norbert
Betrifft: AW: Teilergebnisse einer Tabelle mit VBA kopieren
von: Nepumuk
Geschrieben am: 13.12.2003 21:11:32
Hallo Norbert,
ändere die Zeile:
Range(Range("A2:C2"), Selection.End(xlDown)).Copy
so:
Range(Range("A2:I65536"), Selection.End(xlUp)).Copy
Gruß
Nepumuk
P.S. Schreibt sich wirklich so.
Betrifft: Super!!
von: Norbert
Geschrieben am: 15.12.2003 13:37:37
Hi Nepomuk!
Ich danke dir wirklich sehr. Der Tipp war sehr gut und nach kleinen Anpassungen in meinem Skript läuft alles super!!
Das war eine einfache und zugleich geniale Idee von dir mit dem "temporären" Kopieren der teilergebnisgefilterten Daten in ein neues Workbook.
Ich kopiere alle Daten in eine neue Mappe, suche dort die für mich relevanten Werte mit einer for-Schleife aus und kopiere diese in mein File.
Die temporär erstellte Mappe schließe ich wieder ohne zu speichern.
Ich danke dir nochmals
LG
Norbert