Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1700to1704
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

Spalten kopieren

Spalten kopieren
02.07.2019 13:54:26
Steve

Moin,
ich komme nicht weiter. Vielleicht kann mir da jemand Bitte helfen?
Ich möchte ab einem bestimmten Bereich einer dynamischen Tabelle (Sheet Eingabe) jede Beschriebene Spalte kopieren.
- Die erste Zeile der Tabelle ist die Überschrift.
- Die Menge der Spalten ändert sich gelegentlich.
- Nicht jede Zelle ist befüllt.
Die ersten Drei Spalten der Tabelle sind immer vollständig beschrieben und werden nicht mitkopiert. Anhand dessen kann man das untere Ende der Tabelle ermitteln.
Die Tabelle muss nun zweimal in der dynamischen Zieltabelle (Sheet Daten1) untereinander eingefügt werden.
Ich habe mich jetzt durch mehrere Foren gesucht und diverse Ideen gefunden. Aber ich schaffe es nicht diese umzusetzen. Ich denke ich brauche eine Schleife, und muss die letze Spalte zuvor ermitteln. Aber wenn ich mich dransetze etwas zu schreiben komme ich kein Stück weiter weil mir zu viel Basiswissen fehlt.
Ich danke für eure Hilfe
Liebe Grüße
Steve

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalten kopieren
02.07.2019 17:22:20
Hajo_Zi
Hallo Steves,
es soll also ohne Spalte A:C kopiert werden?
Option Explicit
Sub Kopieren()
Dim LoLetzte1 As Long
Dim LoLetzte2 As Long
LoLetzte1 = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
LoLetzte2 = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
With Worksheets("Auto")
.Range("A1:" & .Cells(LoLetzte1, LoLetzte2).Address).Copy _
Worksheets("5").Range("A1")
End With
End Sub
Es wurde keione Datei verlinkt, da Du die Lösung selber an Deine Bedingungen anpassen wolltest.
Ich bin dann raus, da Lösung erstellt.

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
Anzeige
Fehler
02.07.2019 17:56:17
Hajo_Zi
Nicht A1 sonder D1
Gruß Hajo
AW: Fehler
03.07.2019 08:12:26
Steve
Hallo Hajo,
vielen Dank für deine Hilfe. Nein, die richtigen Spalten waren es nicht, aber diese Info hatte ich nicht richtig weitergegeben. Das habe ich aber selber anpassen können. Ich danke dir für deine Hilfe, es funktioniert hervorragend.
Was aber noch fehlt, ist das die Tabelle die soeben kopiert wurde, gleich ein zweites mal, direkt unter das Ende von dem ersten mal einfügen, in der Zieltabelle eingefügt wird.
Als Beispiel:
1
2
3
1
2
3
Kannst du mir da wohl noch einmal Bitte helfen?
Liebe Grüße
Steve
Anzeige
AW: Fehler
03.07.2019 08:41:20
Torsten
Hallo Steve,
versuchs mal mit dieser Schleife:

Option Explicit
Sub Kopieren()
Dim LoLetzte1 As Long, LoLetzte2 As Long, LoLetzte3, a As Long
LoLetzte1 = Sheets("Eingabe").UsedRange.SpecialCells(xlCellTypeLastCell).Row
LoLetzte2 = Sheets("Eingabe").UsedRange.SpecialCells(xlCellTypeLastCell).Column
LoLetzte3 = Sheets("Daten1").Cells(Rows.Count, 1).End(xlUp).Row
For a = 1 To 2
With Sheets("Eingabe")
.Range("D1:" & .Cells(LoLetzte1, LoLetzte2).Address).Copy Sheets("Daten1").Cells(LoLetzte3 + _
1, 1)
Next a
End Sub

Gruss Torsten
Korrektur
03.07.2019 08:45:54
Torsten
Sorry,
for dem

Next a
fehlt noch ein

End With

Anzeige
AW: Korrektur 2
03.07.2019 08:53:45
Torsten
Bin noch nicht ganz wach glaub ich.
Hier nochmal:

Sub Kopieren()
Dim LoLetzte1 As Long, LoLetzte2 As Long, LoLetzte3, a As Long
LoLetzte1 = Sheets("Eingabe").UsedRange.SpecialCells(xlCellTypeLastCell).Row
LoLetzte2 = Sheets("Eingabe").UsedRange.SpecialCells(xlCellTypeLastCell).Column
For a = 1 To 2
With Sheets("Eingabe")
LoLetzte3 = Sheets("Daten1").Cells(Rows.Count, 1).End(xlUp).Row
.Range("D1:" & .Cells(LoLetzte1, LoLetzte2).Address).Copy Sheets("Daten1").Cells(LoLetzte3 + _
1, 1)
End With
Next a
End Sub

So sollte es funktionieren.
Anzeige
AW: Korrektur 2
03.07.2019 09:12:46
Steve
Moin Torsten,
da warst du schneller als ich mit meiner Nachricht.
Grundsätlich funktioniert dein Beitrag.
Der einzufügende Bereich landet nur noch an der falschen Stelle. Er müsste ab C2 beginnen.
Meine vorhin angegebene Idee Range ("C2") einzufügen funktioniert leider nicht. Dann landet alles zwar in den richtigen Spalten, aber nicht in der richtigen Zeile.
Liebe Grüße
Steve
AW: Fehler
03.07.2019 08:59:29
Steve
Moin Torsten,
das habe ich gleich mal getestet. Ich bekomme eine Fehlermeldung: "Next ohne For"
Aber da ist doch ein "For"
der einzugügende Teil beginnt in der Zelle C2. (der zu kopierende Teil der Tabelle beginnt in Zelle F2).
In Hajos Beitrag konnte ich das anpassen. Bei dir finde ich aber die richtige Stelle nicht. Oder muss das nicht?
Habe mir Gedanken darüber gemacht. Kann ich das so abändern?
.Range("F2:" & .Cells(LoLetzte1, LoLetzte2).Address).Copy Sheets("Daten1").Range("C2").Cells(LoLetzte3 + _
1, 1)
Noch eine Frage? Das ganze funktioniert auch wenn nicht alle Zellen befüllt sind weil hier einfach ein Bereich markiert und kopiert wird. Verstehe ich das richtig?
Vielen Dank schon einmal für deine Hilfe.
Liebe grüße
Steve
Anzeige
AW: Fehler
03.07.2019 09:10:18
Torsten
schau noch mal in meinen letzten Beitrag ;-)
AW: Fehler
03.07.2019 09:17:52
Torsten
Ja richtig. Der Bereich wird kopiert auch wenn da leere Zellen dazwischen sind.
Zu dem anderen. Ja den ersten Teil kannst du so machen mit dem "F2:". Den 2. Teil nicht. Hier wird die erste freie Zelle in Spalte A gesucht und dort wird eingefuegt. Dann beim 2. Durchlauf wieder das gleiche. Wenn du in Spalte C einfuegen willst dann nur hier aendern:

With Sheets("Sheet1")
LoLetzte3 = Sheets("Sheet2").Cells(Rows.Count, 3).End(xlUp).Row
.Range("D1:" & .Cells(LoLetzte1, LoLetzte2).Address).Copy Sheets("Sheet2").Cells(LoLetzte3 + _
1, 3)
End With

Anzeige
AW: Fehler
03.07.2019 10:06:10
Steve
Hallo Torsten,
ja das funktioniert grundsätzlich...aber nicht hier. Ich glaube ich habe auch den Grund gefunden.
Und zwar wird ja nur ein Teil der Ursprungstabelle übertragen. Das liegt daran das zuvor der andere Teil schon übertragen wurde. Also aus zwei Namensspalten wurde eine (Deshalb auch die doppelte übertragung)und die Datumsspalte wurde auch schon übertragen.
Wenn das nun passiert ist, ist die dynamische Ziel-Tabelle schon angelegt. Das wiederum sorgt dafür, das dein Beitrag immer unter der Zieltabelle landet.
Sorry, wusste nicht das das Probleme bereiten kann. Kann man da abhilfe schaffen?
Ich habe mal meine Testdatei angefügt. Vielleicht ist das zielführender.
https://www.herber.de/bbs/user/130707.xlsm
Liebe Grüße
Steve
Anzeige
AW: Fehler
03.07.2019 10:27:06
Torsten
Hallo Steve,
ja das Problem hierbei ist die dynamische oder intelligente Tabelle. Die ist zu intelligent fuer VBA ;-)
VBA akzeptiert die leeren Zellen in einer intelligenten Tabelle nicht als leer.
Frage: Wird die Uebertragung der Daten immer in C2 anfangen? oder wird die Tabelle fortgesetzt?
AW: Fehler
03.07.2019 10:37:43
Steve
Moin Torsten,
derzeit ist meine Datei so angelegt, das die Zieltabelle immer gelöscht und komplett aus der Ursprungstabelle neu aufgebaut wird. Das liegt aber nur daran das ich mir nicht anders zu helfen wusste. Nur so habe ich es hinbekommen, das er die Überschriften sauber übernimmt und das unabhängig davon wieviele Spalten ich belegt habe.
Also fängt es immer in C2 derzeit an.
Die dynamische Tabelle wird auch nur deshalb angelegt, weil ich im nächsten Schritt noch Pivotauswertungen in das Makro reinnehmen möchte.
Liebe Grüße
Steve
Anzeige
AW: Fehler
03.07.2019 11:29:38
Torsten
Hi Steve,
so mit diesem Code sollte es jetzt funktionieren, auch falls die Tabelle fortgefuehrt werden sollte.
Ich musste die intelligente Tabelle direkt ansprechen (ListObject), um dort in der 3. Spalte dieser Tabelle die letzte belegte Zelle zu finden.
Es wird immer in Spalte C eingefuegt und immer 2 mal. Eventuell musst du noch Tabellenblattnamen und den Namen der intelligenten Tabelle aendern, falls noetig.
Gruss Torsten.

Option Explicit
Sub Kopieren()
Dim LoLetzte1 As Long, LoLetzte2 As Long, LoLetzte3, a As Long
LoLetzte1 = Sheets("Eingabe").UsedRange.SpecialCells(xlCellTypeLastCell).Row
LoLetzte2 = Sheets("Eingabe").UsedRange.SpecialCells(xlCellTypeLastCell).Column
For a = 1 To 2
With Sheets("Eingabe")
With Sheets("Daten1").ListObjects("Datum").DataBodyRange
LoLetzte3 = .Cells(.Rows.Count, 3).End(xlUp).Row
End With
.Range("F2:" & .Cells(LoLetzte1, LoLetzte2).Address).Copy Sheets("Daten1").Cells(LoLetzte3 + _
1, 3)
End With
Next a
End Sub

Anzeige
AW: Fehler
03.07.2019 11:55:47
Steve
Lieber Torsten,
ich danke dir recht herzlich für deine Geduld und Hilfe. Damit hast du mir meine Arbeit ungemein erleichtert.
Herzlichst
Steve
gerne...
03.07.2019 12:51:28
Torsten
und danke fuer die Rueckmeldung.
Viel Spass.
Gruss Torsten

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige