Clever-Excel-Forum

Normale Version: Tabelle in VBA filtern und kopieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo, viele Grüsse an die Gemeinschaft 43
Ich müsste mal ganz unverschämt bei den VBA Spezialisten schnorren 100 . Ich habe eine Auswertung zu erstellen, die für völlig unbedarfte Excel-Anwender VOLLAUTOMATISCH laufen muss, d.h. einfach beim Öffnen der Datei die gewünschten Ergebnisse anzeigt. Datenbasis ist die – recht umfangreiche - Tabelle1, die sich bereits über externe Verknüpfungen beim Öffnen aktualisiert. In Tabelle 2, eine Art „Berechnungstabelle“, werden die Daten aus Tabelle1 recht aufwändig aufgearbeitet mit vielen if then else Berechnungen etc. etc. Am Ende dieser Berechnungstabelle habe ich eine Ergebnisspalte ("K") angefügt. Diese gibt, wenn alle Berechnungen und Kriterienabfragen durchgeführt sind ein Ergebnis aus oder aber bleibt leer. So, nun soll über VBA diese Berechnungstabelle (Tabelle2) in der Ergebnisspalte (K) gefiltert werden (=zeige alle Zeilen in denen die Spalte "K" NICHT leer ist) und dieses Ergebnis soll nun in Tabelle 3 (Ergebnisreport) kopiert werden. Die Tabellen 1 und 2 werden von mir dann ausgeblendet, sodass ein Anwender die Datei nur öffnet und ausschließlich Tabelle 3, sprich den Ergebnisreport mit dem aktuellsten Ergebnis vorfindet. Kurz und knapp: Filter mir Spalte „K“ in Tabelle2 nach nicht leeren Zellen und kopiere die gefundenen Zeilen in Tabelle3. Ich dachte, das is ja gar net sooo spannend und das wäre auch für nen VBA-Rookie machbar, aber ich bin trotzdem gescheitert 20  33 und frage nun ganz frech und unverblümt nach Eurem Lösungsvorschlag. 23 Lieben Dank vorab und noch einen schönen Sonntag. LG Jürgen
Zeichne den Filtervorgang mit dem Makrorekorder auf.  Nutze den Erweiterten Filter. Dort kann man einen Zielbereich einstellen.
Hallo


Zitat:recht aufwändig aufgearbeitet mit vielen if then else Berechnungen  ???


mal ein Hinweis von mir, ungetestet.  Wenn mn die Daten per VBA holt und auswertet kann man sich vielleicht eine Menge Berechnungen ersparen.
Dazu sollten wir die Datei mal als Beispiel sehen.  Mit lösungen von Hand wie das fertige Ergebnis aussehen soll.  Garantieren kann ich eine Lösung nicht!

mfg Gast 123
Vielen Dank Ral_B,
dass hatte ich probiert und bin immer wieder hängengeblieben. Die Blätter sind ja zum Teil ausgeblendet und natürlich geschützt und das muss erst mal raus und nach dem Filtern wieder rein und da ist er immer wieder steckengeblieben. Die Idee mit dem Spezialfilter, bzw. erweiterten Filter ist gut, damit habe ich es nun erst einmal umgesetzt. Hierzu noch n Tipp an Alle, die auch damit hantieren. Das mit dem ZIELBEREICH festlegen funktioniert nur, wenn man den Filter von der gewünschten Zielbereich-Tabelle startet. Befindet man sich in einer anderen Tabelle, wie z.Bsp. des Quellbereichs bekommt man nen Fehler "Nur gefilterte Daten können in das aktive Blatt kopiert werden". Hatte ich erst gar nicht verstanden und bin nur zufällig und kurz vorm Überschnappen drauf gekommen. Nochmals vielen Dank Ralf_b. Trotzallem lasse ich die Anfrage nochmal offen, eventuell bietet noch jemand Code an für eine VBA-Abarbeitung beim Öffnen.

Hallo Gast 123,
absolut richtig, das Problem ist nur, dass mein VBA bis auf ganz ganz wenige Basics faktisch nicht vorhanden ist. (Ich lerne in dem ich den Makrorecorder nehmke und anschl., mir den Code anschaue.) Trotzallem mache ich recht komplexe Sachen in Excel - nur wenn ein Profi das sieht lacht er sich wahrscheinlich tot. Da ich erst gar nicht nach ausgefallenen Funktionen suche, nehme ich einfach Tabellenblätter und berechne dort alles Schrittchen für Schrittchen, anschl. werden diese einfach weggeblendet. Umständlich aber auch sehr übersichtlich und bei späteren Änderungen schnell wieder nachvollziehbar. Und am Ende macht man es ja nur einmal und wenn es zum Ziel führt ist alles gut. In diesem Fall wollte ich "nur" den Filtervorgang in VBA komplett automatisieren (jetzt gibt es halt noch ne Schaltfläche zum Starten des Makros) für Leute, die wirklich gar nichts mit Excel anfangen können. Die "Vorbearbeitung" der Tabelle ist ja bereits getan und fertig und wenn ich auch DAS mir von Euch in VBA umsetzen lassen würde, dann wäre das zwar super, aber ich müsste bei jeder Änderung und Ergänzung um Hilfe bitten. Filtern und Wegschreiben kann ich dann vom Code her (wenn ich ihn habe) halbwegs nachvollziehen - bei größeren Verschachtelungen steige ich eh aus). Trotzdem vielen lieben Dank für das Angebot. LG Jürgen
Das Thema hatte ja nun noch keine weiterführende Beendigung, deshalb wollte ich meine finale "Lösung" hier noch dazuposten. Vielleicht bringt es den einen oder anderen weiter bzw. "inspiriert" ihn zu einer Lösung.
Aufgabenstellung war: Erstelle einen Report der alle nicht abgerechneten Vorgänge listet.
Dazu wurde eine Tabelle genutzt, die erst einmal ALLE Vorgänge auflistet, dann etliche Kriterien abarbeitet: Bsp.: Wenn Vorgang Zeile 5 in Spalte 3 ein Rechnungsdatum aufweist, dann berücksichtige diesen Datensatz nicht, wenn nicht dann prüfe, ob der Vorgang überhaupt schon beendet ist, falls nein, dann entferne den Datensatz aus der Berücksichtigung, wenn ja, dann . . . . usw. usw. Am Ende aller Überprüfungen steht dann in einer Ergebnisspalte ein X für "Aufnahme in den Report" oder bleibt leer für "Keine Aufnahme in den Report". Diese Kalkulationstabelle wird versteckt und soll vom User nicht gesehen werden. Der User drückt nur einen Commandbutton und erhält einen Report aller Datensätze, die in der Kalkulationstabelle alle Kriterien erfüllt haben und somit den Hinweis "X" für "Aufnahme in den Report" ausweisen.
Konkret: Die Kalkulationstabelle soll nach dem Wert "X" in der Ergebnisspalte gefiltert werden, das Ergebnis der gefilterten Tabelle soll nun in eine neue schön formatierte Tabelle kopiert werden. Meine Lösung:
Tabelle4 ist die Berechnungs- bzw. Kalkulationstabelle,
Tabelle7 ist der Report.
Der User nutzt zum Erstellen des Reports einen CommandButton (RunReportBilling) auf
einer Userform (ufStartBillingReport)

Sub RunReportBilling()

'Einträge im "alten" Report erstmal löschen
    Tabelle7.Activate
    Tabelle7.Unprotect
    Tabelle7.Range("A2:J10000").ClearContents

'Tabelle "Berechnung" nach "x" in Spalte "Alarmliste" filtern
    Tabelle4.Rows(2).Autofilter Field:=43, Criteria1:="x"
   
'Filterergebnis kopieren und in Ergebnistabelle ("Kontrollreport") einfügen
    Tabelle4.Range("A3:AL10000").SpecialCells(xlCellTypeVisible).Copy Destination:=Tabelle7.Range("A2")
   
'Filter in Tabelle4 ("Berechnung") entfernen
    Tabelle4.Rows(2).Autofilter

'Ergebnistabelle (Report) formatieren
    Tabelle7.Range("A2:J2").Select
        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorLight2
            .TintAndShade = 0.799981688894314
            .PatternTintAndShade = 0
        End With
  Tabelle7.Range("A2:J3").Select
  Tabelle7.Range("A2:J3").Copy
  Tabelle7.Range("A4:J10000").Select
  Tabelle7.Range("A4:J10000").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Tabelle7.Range("A2").Select
    Tabelle7.Application.CutCopyMode = False
 
'Cursor auf A2 in Ergebnistabelle ("Kontrollreport") setzen und Userform schließen
    Tabelle7.Range("A2").Select
    Unload ufStartBillingReport
   
End Sub


Es ist mir klar, dass das keine Superlösung darstellt, insbesondere weil ich, um den Report zu formatieren jedesmal diese Formatierung laufen lassen muss, aber es stellt eine funktionierende Lösung dar und soll auch nur eine Anregung sein so etwas zu lösen, wenn man wie ich von VBA keinen Plan hat. In diesem Sinne. Liebe Grüsse - Jürgen
Verzichte auf 'Protection'

Code:
Sub M_snb()
   Tabelle7.usedrange.clearcontents

   with Tabelle4
     .cells(1,100).resize(2)=application.transpose(array(.cells(1,43),"x")
     .cells(1).currenteregion.advancedfilter 2,.cells(1,100).currentregion,Tabelle7.cells(1)
     .cells(1,100).currentregion.clearcontents
   end with
End Sub
Vielen Dank,
das ist einleuchtend und wird probiert.