Gefilterter Bereich – Kopie (VBA)

Daten-Liste in gefilterten Bereich kopieren (VBA)

„Ist doch ganz ein­fach” dachte ich früher ein­mal. Markieren, kopieren, in den gefilterten Bere­ich ein­fü­gen. Die Ernüchterung kam rasch, so geht das näm­lich nicht. Die gefilterten, die nicht sicht­baren Zellen wer­den ein­fach mit aus­ge­füllt und das Ziel ist damit ver­fehlt.

Zugegeben, es gibt die eine oder andere Lösung auf rein­er Formel-Basis. Aber das empfinde ich als Zumu­tung, weil recht umständlich hand­hab­bar . Und natür­lich muss solch eine Formel jedes Mal neu über­prüft und gegebe­nen­falls angepasst wer­den. Darum ziehe ich eine „saubere” VBA-Lösung vor. Auch hier räume ich ein, dass diese vorgeschla­gene Lösung etwas mehr in die Tiefe geht als ein Gele­gen­heit­spro­gram­mier­er es machen würde. Im Prinzip spricht auch nichts dage­gen, den gefilterten Bere­ich mit­tels ein­er Schleife zu durch­laufen und jew­eils zu prüfen, ob die Zeile sicht­bar ist oder nicht. Aber bei sehr großen Dateien ist meine Lösung doch deut­lich schneller und so haben Sie vielle­icht eine Gele­gen­heit, ihren Wis­senspool zu erweit­ern.

Diese Datei enthält in Tabelle1 einige Dat­en, die Sie fil­tern kön­nen. Ich habe es so ein­gerichtet, dass großzügiger weise jedes dritte Los gewin­nt (siehe die Funk­tion in Spalte B). Mit dem Fil­ter kön­nen Sie nun nur die Gewin­ner anzeigen lassen und die Ver­lier­er aus­blenden. Wenn Sie dann das Makro aufrufen, sollen die Gewinne an die „Auser­wählten” per Kopie zugewiesen wer­den. 

Zugegeben, das ganze Makro ließe sich kürz­er fassen. Mit weniger Vari­ablen und auch nicht unbe­d­ingt allen Prüfrou­ti­nen. Aber so ist es bess­er für Sie zu ver­ste­hen und kürzen kön­nen Sie immer noch  ;-). Ach ja, vielle­icht kom­men Ihnen die Vari­ablenna­men ein­fach nur kryp­tisch vor. Aber bei genauerem Hin­se­hen wer­den Sie erken­nen, dass sich darin ein Sys­tem ver­birgt. „Src” ste­ht für „Source”, „Dst” entsprechend für „Des­ti­na­tion”; „wks” kürzt das „Work­Sheet” ab und „rng” ein­fach nur „Range”.

Prinzip­iell sind nur wenige Anpas­sun­gen erforder­lich. Das wer­den Sie erken­nen, wenn Sie den Code Zeile für Zeile durchge­hen. Viele Stan­dards sind enthal­ten, die Zeile

rngDst.Areas(Ze).Offset(0, 2)

kön­nte Ihnen frem­dar­tig vorkom­men. Durch die Funk­tion Areas() wird die Range in ihre einzel­nen Teile, also die einzelne Zelle  zer­legt und so wird eine ziel­gerichtete Adressierung ermöglicht.

[NachOben­Let­zte Verweis=„ML: Kopie in gefilterten Bere­ich”]

 

Dieser Beitrag wurde unter Mit VBA/Makro, Musterlösungen, Tabelle und Zelle, Tipps und Tricks abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.