Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Spalten kopieren und in andere Datei einfügen

Spalten kopieren und in andere Datei einfügen
01.11.2018 11:28:54
parza
Hallo Fachleute,
mit Hilfe von Google habe ich unten stehendes Makro gefunden. Ob es wirklich gut so ist, weiß ich nicht, aber es funktionert zunächst mal. Ziel ist es, aus einer Tabelle (Sheet „Personal“) ausgewählte Spalten zu kopieren und woanders einzufügen. DIn meinem Makro fügt er die Inhalte aber in die gleiche Datei unter Sheet „KE“ ein. Ich hätte aber gern, dass er sie in eine andere, noch nicht geöffnete Datei z.B. C:\Test\test.xls an der Position B5 einfügt.
Ich wäre euch sehr dankbar für die Unterstützung.
parza
Option Explicit
Sub kopieren()
Dim Spalte As Variant, intI As Integer
Spalte = Array(10, 11, 24, 28, 31)
Application.ScreenUpdating = False
For intI = 0 To 4
Worksheets("Personal").Select
Range(Cells(3, Spalte(intI)), Cells(Worksheets("Personal").Cells(Rows.Count, Spalte( _
intI)).End(xlUp).Row, Spalte(intI))).Copy
Worksheets("KE").Select
Cells(3, intI + 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Next
Range("B5").Select
Application.ScreenUpdating = True
End Sub

Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 11:33:07
Hajo_Zi
das geht nicht, dazu muss die Datei auf sein
Range(Cells(3, Spalte(intI)), Cells(Worksheets("Personal").Cells(Rows.Count, Spalte( _
intI)).End(xlUp).Row, Spalte(intI))).Copy Workboooks("Datei1.xlsm").Worksheets("KE").Cells(3, intI + 1)

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
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 12:07:33
parza
Hajo, danke für die rasche Antwort. Ich bin vba-Laie. Wo muss ich dies in meinem Makro einfügen bzw. wie sieht das Ganze komplett aus?
Danke parza
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 12:09:53
Hajo_Zi
ersetze diesen Teil
Range(Cells(3, Spalte(intI)), Cells(Worksheets("Personal").Cells(Rows.Count, Spalte( _
intI)).End(xlUp).Row, Spalte(intI))).Copy
Worksheets("KE").Select
Cells(3, intI + 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False

Ich bin davon ausgegangen das die Datei vorher geöffnet wurde mit Open.
Gruß Hajo
Anzeige
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 12:33:55
parza
Nochmals danke. Aber leider komme ich nicht weiter.
Vielleicht habe ich meine Frage falsch gestellt.
Das Makro funktioniert prizipiell, aber die kopierten Spalten sollen nicht in der Ausgangsdatei in Sheet "KE" eingefügt werden, sondern in einer neuen Datei, die in einem anderen Verzeichnis liegt C:\Test\test.xls und dort in Zelle B5.
Vielleicht findet sich nun eine Lösung.
parza
Anzeige
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 12:36:09
Hajo_Zi
das kann ich nicht, da ich nicht auf fremde Rechner schaue.
Ich vermute mal Du hast meine Beiträge nicht komplett gelesen.
Viel Erfolg noch.
Gruß Hajo
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 12:57:13
parza
.. doch habe ich. Auch eine Datei in C:\Test\test.xls existiert und diese ist auch geöffnet.
Schönen Feiertag, parza
Anzeige
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 15:09:06
Werner
Hallo,
teste mal. Bei dem Code muss die Zieldatei geschlossen sein. Per Code wird die Zieldatei geöffnet, die Daten kopiert, die Zieldatei gespeichert und wieder geschlosse.
Option Explicit
Sub kopieren()
Dim intI As Integer, loLetzteZiel As Long
Dim wbZiel As Workbook, wsZiel As Worksheet, Spalte As Variant
Spalte = Array(10, 11, 24, 28, 31)
Application.ScreenUpdating = False
'Datei öffnen und Zielblatt zuweisen
Set wbZiel = Workbooks.Open("C:\Test\test.xlsx")
Set wsZiel = wbZiel.Worksheets("Der_Name_des_Zielblattes")
For intI = 0 To 4
With ThisWorkbook.Worksheets("Personal")
'Bereich kopieren
.Range(.Cells(3, Spalte(intI)), .Cells(.Cells(.Rows.Count, _
Spalte(intI)).End(xlUp).Row, Spalte(intI))).Copy
With wsZiel
'letzte belegte Zeile ermitteln + 1
loLetzteZiel = .Cells(.Rows.Count, 2).End(xlUp).Offset(1).Row
'Prüfung ob die kleiner 5 ist, dann einfügen bei 5
If loLetzteZiel 
Achtung: Es erfolgt keine Prüfung ob die Zieldatei schon offen ist.
Gruß Werner
Anzeige
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 15:57:58
parza
.... vielen herzlichen Dank.
Ist zu 99% genau das, was ich wollte.
Eine Sache ist noch, nämlich dass alle Spalten untereinander in der Spalte B kopiert werden.
Ich habe es nicht ausdrücklich formuliert: Die kopierten und eingefügten Spalten sollten nebeneinander sein.
Noch eine Frage: Falls sich meine Zieldatei einmal ändert. Wo müsste ich deinen Code ändernm um z.B. nicht in B5, sondern in A3 einzufügen.
parza
Anzeige
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 16:13:01
Werner
Hallo,
dann so:
Option Explicit
Sub kopieren()
Dim intI As Integer, loZeileZiel As Long, loSpalteZiel As Long
Dim wbZiel As Workbook, wsZiel As Worksheet, Spalte As Variant
'festlegen der Zielzeile
loZeileZiel = 5
'festlegen der Zielspalte (Startspalte) A=1, B=2 ...
loSpalteZiel = 2
Spalte = Array(10, 11, 24, 28, 31)
Application.ScreenUpdating = False
'Datei öffnen und Zielblatt zuweisen
Set wbZiel = Workbooks.Open("C:\Test\test.xlsx")
Set wsZiel = wbZiel.Worksheets("Der_Name_des_Zielblattes")
For intI = 0 To 4
With ThisWorkbook.Worksheets("Personal")
'Bereich kopieren
.Range(.Cells(3, Spalte(intI)), .Cells(.Cells(.Rows.Count, _
Spalte(intI)).End(xlUp).Row, Spalte(intI))).Copy
With wsZiel
'kopierte Daten als Werte einfügen
.Cells(loZeileZiel, loSpalteZiel).PasteSpecial Paste:=xlPasteValues
loSpalteZiel = loSpalteZiel + 1
End With
End With
Next
'Zielblatt speichern und schließen
wbZiel.Close True
'Kopierspeicher leeren
Application.CutCopyMode = False
'Variablen aufräumen
Set wbZiel = Nothing: Set wsZiel = Nothing
End Sub
Gruß Werner
Anzeige
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 16:20:58
parza
Tausend Dank, perfekt. Vor allem deine Erklärungen lassen es für mich ein bisschen duchsichtiger werden.
parza
Gerne u. Danke für die Rückmeldung. o.w.T.
01.11.2018 16:24:19
Werner
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
02.11.2018 08:42:10
parza
Hallo Werner, hallo Fachleute,
danke nochmals für eure große Unterstützung gestern. Ich habe nun den Code in die Originaldatei eingefügt. Unterschied sind Dateinamen und Dateipfad (ist unerheblich und funktioniert). Eine große Änderung ist, dass es im Original mehr Spalten = Arrays sind.
Nun zum Problem und was ich durch Versuch/Irrtum herausgefunden habe:
Lasse ich den Code "For intI = 0 To 4" so wie im Originalcode von Werner, läuft alles durch, allerdings werden nur 5 Spalten kopiert und eingefügt.
Ändere ich "For intI = 0 To 20" kommt ein Debugging (gelb markiert) mit Laufzeitfehler 9 bei diesen Zeilen
.Range(.Cells(3, Spalte(intI)), .Cells(.Cells(.Rows.Count, _
Spalte(intI)).End(xlUp).Row, Spalte(intI))).Copy
Beende ich nun das Debuggen, ist trotzdem alles an der richtigen Stelle und komplett eingefügt und kopiert.
Hat noch jemand eine Idee?
parza
Option Explicit
Sub KE_erstellen()
Dim intI As Integer, loZeileZiel As Long, loSpalteZiel As Long
Dim wbZiel As Workbook, wsZiel As Worksheet, Spalte As Variant
'festlegen der Zielzeile
loZeileZiel = 3
'festlegen der Zielspalte (Startspalte) A=1, B=2 ...
loSpalteZiel = 3
Spalte = Array(10, 11, 16, 17, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 43)
Application.ScreenUpdating = False
'Datei öffnen und Zielblatt zuweisen
Set wbZiel = Workbooks.Open("Q:\4\41\AllgemeinesSG41\Zusammenarbeit\Kostenersatz\18_19\xxxx  _
KE_18_19.xls")
Set wsZiel = wbZiel.Worksheets("Tabelle1")
For intI = 0 To 20
With ThisWorkbook.Worksheets("Personal")
'Bereich kopieren
.Range(.Cells(3, Spalte(intI)), .Cells(.Cells(.Rows.Count, _
Spalte(intI)).End(xlUp).Row, Spalte(intI))).Copy
With wsZiel
'kopierte Daten als Werte einfügen
.Cells(loZeileZiel, loSpalteZiel).PasteSpecial Paste:=xlPasteValues
loSpalteZiel = loSpalteZiel + 1
End With
End With
Next
'Zielblatt speichern und schließen
'wbZiel.Close True
'Kopierspeicher leeren
Application.CutCopyMode = False
'Variablen aufräumen
Set wbZiel = Nothing: Set wsZiel = Nothing
End Sub

Anzeige
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
02.11.2018 08:49:27
Werner
Hallo,
na ja, dein Array hat 20 Werte. Das Array ist aber Nullbasiert. Hat also Werte von 0-19 = 20 Werte.
Hier
For intI = 0 To 20

versuchst du aber den Wert 20 im Array anzusprechen - den gibt es aber nicht.
Also
For intI = 0 To 19
Gruß Werner
Anzeige
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
02.11.2018 09:22:11
parza
... vielen Dank. Das war die Lösung. Ich bin von 20 Zahlen = 20 Spalten ausgegangen. vba-Laie halt.
Werner, wenn du in München wohnen würdest, hättest du ein Bier gut.
Danke, parza
Gerne doch...
02.11.2018 09:33:41
Werner
Hallo,
...das ist für mich jetzt leider nicht gerade um die Ecke.
Gruß Werner
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Spalten kopieren und in andere Datei einfügen


Schritt-für-Schritt-Anleitung

Um in Excel Spalten zu kopieren und in eine andere Datei einzufügen, kannst du das folgende VBA-Makro verwenden. Dies ist besonders nützlich, wenn du bestimmte Spalten aus einem Tabellenblatt (z.B. "Personal") in eine andere Datei (z.B. "test.xlsx") übertragen möchtest.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  3. Füge den folgenden Code in das Modul ein:

    Option Explicit
    Sub kopieren()
       Dim intI As Integer, loZeileZiel As Long, loSpalteZiel As Long
       Dim wbZiel As Workbook, wsZiel As Worksheet, Spalte As Variant
    
       ' Festlegen der Zielzeile und -spalte
       loZeileZiel = 5 ' Beispiel: Zeile B5
       loSpalteZiel = 2 ' B = 2
       Spalte = Array(10, 11, 24, 28, 31) ' Die Spalten, die du kopieren möchtest
    
       Application.ScreenUpdating = False
    
       ' Datei öffnen und Zielblatt zuweisen
       Set wbZiel = Workbooks.Open("C:\Test\test.xlsx")
       Set wsZiel = wbZiel.Worksheets("Der_Name_des_Zielblattes")
    
       For intI = 0 To UBound(Spalte)
           With ThisWorkbook.Worksheets("Personal")
               ' Bereich kopieren
               .Range(.Cells(3, Spalte(intI)), .Cells(.Cells(.Rows.Count, Spalte(intI)).End(xlUp).Row, Spalte(intI))).Copy
               With wsZiel
                   ' Kopierte Daten als Werte einfügen
                   .Cells(loZeileZiel, loSpalteZiel).PasteSpecial Paste:=xlPasteValues
                   loSpalteZiel = loSpalteZiel + 1 ' Gehe zur nächsten Spalte
               End With
           End With
       Next
    
       ' Zielblatt speichern und schließen
       wbZiel.Close True
       Application.CutCopyMode = False
    
       ' Variablen aufräumen
       Set wbZiel = Nothing
       Set wsZiel = Nothing
    End Sub
  4. Schließe den VBA-Editor und führe das Makro aus.


Häufige Fehler und Lösungen

  • Fehler: Laufzeitfehler 9
    Wenn du beim Ausführen des Makros einen Laufzeitfehler 9 (Index außerhalb des gültigen Bereichs) erhältst, kann das daran liegen, dass du versuchst, auf ein Element im Array zuzugreifen, das nicht existiert. Stelle sicher, dass der Index im Array korrekt ist (z.B. For intI = 0 To UBound(Spalte)).

  • Fehler: Zieldatei ist nicht geöffnet
    Das Makro erfordert, dass die Zieldatei geschlossen ist, da sie im Code geöffnet wird. Achte darauf, dass die Datei test.xlsx nicht bereits geöffnet ist.


Alternative Methoden

Falls du nicht mit VBA arbeiten möchtest, kannst du die folgenden Methoden verwenden:

  • Manuelles Kopieren: Markiere die gewünschten Spalten im Quellblatt, kopiere sie mit Strg + C und füge sie in die Zieldatei mit Strg + V ein.
  • Power Query: Nutze Power Query, um Daten aus einer Excel-Datei zu importieren und in eine andere zu laden. Dies ermöglicht eine einfache Handhabung von Datenübertragungen ohne VBA.

Praktische Beispiele

Angenommen, du möchtest die Spalten 10, 11, 24, 28 und 31 aus dem Tabellenblatt "Personal" in die Datei C:\Test\test.xlsx einfügen:

  1. Anpassung des Zielblatts: Stelle sicher, dass das Zielblatt in der Zieldatei korrekt benannt ist, z.B. "Der_Name_des_Zielblattes".
  2. Ändere die Zielzelle: Um die Daten nicht in B5, sondern in A3 einzufügen, passe die Variablen loZeileZiel und loSpalteZiel entsprechend an:

    loZeileZiel = 3 ' A3
    loSpalteZiel = 1 ' A = 1

Tipps für Profis

  • Verwende dynamische Arrays: Wenn du eine variable Anzahl an Spalten hast, kannst du die Größe des Arrays dynamisch festlegen, um flexibler zu sein.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung in deinem Makro, um mögliche Probleme elegant abzufangen und zu melden.
  • Testen in einer Kopie: Teste dein Makro immer zuerst an einer Kopie deiner Datei, um ungewollte Änderungen in der Originaldatei zu vermeiden.

FAQ: Häufige Fragen

1. Kann ich das Makro anpassen, um mehr Spalten zu kopieren?
Ja, passe einfach das Array Spalte an, um die gewünschten Spaltennummern aufzunehmen.

2. Wie kann ich das Makro so ändern, dass es die Zieldatei nicht schließt?
Entferne oder kommentiere die Zeile wbZiel.Close True, um die Zieldatei nach dem Einfügen offen zu lassen.

3. Was mache ich, wenn ich die Datei nicht finden kann?
Überprüfe den Pfad in Workbooks.Open("C:\Test\test.xlsx") und stelle sicher, dass die Datei existiert und der Pfad korrekt ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige