5.5k Aufrufe
Gefragt in Tabellenkalkulation von insomnic Einsteiger_in (67 Punkte)
Hallo Ihr netten Supporter,

meine Anfrage ist hier wohl schon öfters in ähnlicher oder abgewandelter Form gestellt worden und ich habe bereits versucht, mir aus den jeweiligen Antworten ein passendes Makro zu basteln, aber ich bekomme das leider nicht hin.

Ich möchte aus Tabelle A einen Bereich in Tabelle B kopieren.

Der Bereich soll in der Tabelle A von Zelle A3 bis zur letzten in Zeile 3 gefüllten Spalte sowie bis zur letzten in Spalte E gefüllten Zeile reichen.

Eingefügt werden sollen die Inhalte dieses Bereichs in Tabelle B ab Zelle A21.

Reichts das so als Beschreibung, oder bedarf es einer Beispielmappe?

Besten Dank im Voraus!

insomnic

20 Antworten

0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
Hallo insomnic,
deine Bereiche zum kopieren sind für mich nicht so ganz klar.
Vielleicht ist ein Muster doch eine gute Lösung.

Hier kannst du deine Datei uploaden, und den Link ins Forum stellen.

Gruß
fedjo
0 Punkte
Beantwortet von insomnic Einsteiger_in (67 Punkte)
Habe mal eine Beispielmappe hochgeladen:

www.file-upload.net/download-4083496/Beispiel.xls.html

Der zu kopierende Bereich ist immer rechteckig.
Links und oben wird er durch die Zelle A3 begrenzt, rechts durch diejenige Spalte, in welcher der letzte Eintrag steht, und nach unten durch diejenige Zeile, in welcher in Spalte E der letzte Eintrag steht.

Hört sich wahrscheinlich komplizierter an als es ist, aber sollte spätestens in der Beispielmappe auf einen Blick klar werden.

Nochmals vielen Dank im Voraus!

Stefan
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Stefan,

bei mir funktioniert's so:

Option Explicit

Sub copy_paste()
Sheets("Tabelle A").Select
Sheets("Tabelle A").Range(Cells(3, 1), Cells(Cells(Rows.Count, 5).End(xlUp).Row, Sheets("Tabelle A") _
.UsedRange.SpecialCells(xlCellTypeLastCell).Row)).Copy _
Sheets("Tabelle B").Range("A21")
End Sub


Gruß
Rainer
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Stefan,

hatte die Testdatei vergessen.

Hier ist sie

Gruß
Rainer
0 Punkte
Beantwortet von insomnic Einsteiger_in (67 Punkte)
Super Rainer,

macht exakt das, was es soll!

Ein dickes Dankeschön für diese punktgenaue und auch noch blitzschnelle Hilfe!

Trotzdem noch eine kleine Anschlussfrage:

Kann man das ohne großen Aufwand auch noch so anpassen, dass statt "Tabelle B" immer die aktuell aktive Tabelle als Ziel genommen wird? Das würde die Sache nochmals enorm vereinfachen...

Vielen Dank!

Stefan
0 Punkte
Beantwortet von insomnic Einsteiger_in (67 Punkte)
Falls ich mich bei meiner Anschlussfrage unklar ausgedrückt habe:

Ich befinde mich also in einem bzw. dem aktiven Tabellenblatt und möchte von dort aus das Makro starten, welches dann den Bereich der Tabelle A in diese aktive Tabelle ab Zelle 21 einfügt.

Tut mir leid, dass ich diesen Ansatz bei meiner Anfrage nicht sofort vor Augen hatte, aber manchmal ergeben sich bei mir die weiter führenden Ideen leider erst, wenn die Lösung des Hauptproblems, welches vorher den Gesamtblick verstellt hatte, vorliegt...

Herzlichen Dank!

Stefan
0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
Hallo Stefan,
habe den Code von Rainer etwas geändert, du kannst jetzt das Makro aus jedem Tabellenblatt mit Strg + s starten in dem die Kopie eingefügt wird.

Sub copy_paste()
Dim strStartBlatt As String
strStartBlatt = ActiveSheet.Name
Application.ScreenUpdating = False
Sheets("Tabelle A").Select
Sheets("Tabelle A").Range(Cells(3, 1), Cells(Cells(Rows.Count, 5).End(xlUp).Row, Sheets("Tabelle A") _
.UsedRange.SpecialCells(xlCellTypeLastCell).Row)).Copy
ActiveWorkbook.Worksheets(strStartBlatt).Activate
ActiveSheet.Range("A21").PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
, Transpose:=False
Application.ScreenUpdating = True
End Sub


Musterdatei

Gruß
fedjo
0 Punkte
Beantwortet von insomnic Einsteiger_in (67 Punkte)
Hallo fedjo und Rainer,

was ich jetzt beim näheren Testen festgestellt habe und für mich nicht auf Anhieb erkennbar war, wird wohl bei beiden Lösungen in der Zieltabelle der Bereich rechts vom eingefügten Bereich mit Leerzellen überschrieben.

Ideal wäre es gewesen, wenn nur der einzufügende Bereich überschrieben würde. Der Bereich rechts davon ist zwar beim aktuellen Stand meiner Tabellen frei, so dass die gewünschte Funktionalität bis auf weiteres erfüllt ist, aber dies könnte sich in Zukunft auch durchaus schnell mal ändern.

Deshalb würde ich mich sehr freuen, wenn Euch dazu noch was einfallen würde. Falls sich das nicht so ohne weiteres realisieren lässt, fände ich eine kleine Erläuterung der Gründe nett.

Bis hierher aber schon meinen herzlichsten Dank, weil ich mit den Ergebnissen bis auf weiteres arbeiten kann.

Stefan
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Stefan,

sorry für meine Sendepause, war längere Zeit nicht online.

Habe nun Fedjo's Code mal entsprechend angepasst.
Teste mal selbst.

Sub copy_paste()
Dim strStartBlatt As String
strStartBlatt = ActiveSheet.Name
Application.ScreenUpdating = False
Sheets("Tabelle A").Select
Range(Cells(3, 1), Cells(Cells(Rows.Count, 5).End(xlUp).Row, Cells(3, Columns.Count).End(xlToLeft).Column)).Copy
ActiveWorkbook.Worksheets(strStartBlatt).Activate
ActiveSheet.Range("A21").PasteSpecial
Application.CutCopyMode = False
Range("A1").Select
Application.ScreenUpdating = True
End Sub


Gruß
Rainer
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo noch mal,

anbei eine Vereinfachung

Option Explicit

Sub copy_paste()
Dim strStartBlatt As String
strStartBlatt = ActiveSheet.Name
Application.ScreenUpdating = False
Sheets("Tabelle A").Select
Range(Cells(3, 1), Cells(Cells(Rows.Count, 5).End(xlUp).Row, Cells(3, Columns.Count).End(xlToLeft).Column)).Copy _
Worksheets(strStartBlatt).Range("A21")
Application.CutCopyMode = False
Range("A1").Select
Application.ScreenUpdating = True
End Sub


Gruß
Rainer
...