Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Kopieren in erste Freie Spalte ab Zeile

Kopieren in erste Freie Spalte ab Zeile
18.03.2021 16:34:43
Burkhard
Hallo Leute,
ich kopiere per VBA eine Spalte aus einer Tabelle in ein anderes Tabellenblatt einer anderen Datei. nun sollen die Werte in der ersten Freien Spalte aber erst ab Zeile 5 eingefügt werden.
Da suche ich mir im Moment die Finger wund :-(
Das einfügen funktioniert soweit ganz gut, nur das ich in den ersten Zeilen Überschriften habe, und die Werte sollen da drunter.
hier mal der entsprechende Ausschnitt des Code den ich bis jetzt habe....
Else
Sheets("Fahrplan").Range("d2:d97").Copy
Workbooks.Open Filename:=strfilename1, UpdateLinks:=3
Sheets("Tabelle2").Cells(Cells(Columns.Count).End(xlToLeft).Column + 1).PasteSpecial _
Paste:=xlValue, Operation:=xlNone, SkipBlanks:=False
End If
Gruß Burkhard

Anzeige

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopieren in erste Freie Spalte ab Zeile
18.03.2021 16:36:44
Burkhard
PS ich kann erst wieder am Montag testen ;-)

AW: Kopieren in erste Freie Spalte ab Zeile
18.03.2021 16:44:42
Regina
Hi,
sollte ab Zeile 5 so passen:
Sheets("Tabelle2").Cells(5,Cells(Columns.Count).End(xlToLeft).Column + 1).PasteSpecial _
Paste:=xlValue, Operation:=xlNone, SkipBlanks:=False
Gruß
Regina

AW: Kopieren in erste Freie Spalte ab Zeile
22.03.2021 07:43:01
Burkhard
Hallo Regina,
manchmal sind es die Kleinigkeiten die helfen.
Hat wunderbar geklappt. Danke!
Jetzt hab ich nur noch ein Problem.
In Zeile 1 von dem Tabellen blatt sind Werte eingetragen.
Ich suche ja nun die erste freie Spalte in Zeile 5 um neue Daten einzutragen.
Natürlich sucht das Script in der ersten Zeile nach der ersten freien Spalte.
Gibt es da eine Lösung um Spalte eins aus der Suche auszuklammern?

Anzeige
AW: Kopieren in erste Freie Spalte ab Zeile
22.03.2021 09:37:19
Regina
Hallo Burkhard,
die Frage verstehe ich nicht ganz. Diesee Code:
Sheets("Tabelle2").Cells(5,Cells(Columns.Count).End(xlToLeft).Column
ermittelt in Zeile 5 die erste freie Spalte. Was passt da nicht? Oder bist Du mit Spalten und Zeilen durcheinander gekommen? Sonst bitte mal eine Beispieldatei hochladen.
Gruß Regina

Anzeige
AW: Kopieren in erste Freie Spalte ab Zeile
22.03.2021 11:05:58
Burkhard
Hallo Regina,
ich bekomme die Datei leider nicht hochgeladen, da sie mehr als 300kb hat :-(.
In der ersten Zeile hatte ich am Anfang noch Daten in den Zellen A-F stehen, die dafür gesorgt haben, das nicht in der nächsten freien Spalte eingefügt wurde sondern in Spalte G obwohl Spalte E und F bis auf Zeile 1 leer waren.
Nun habe ich das soweit geändert, dass die Zeile 1 nicht mehr dort eingefügt wird. Daher kann ich die Daten auch wieder ab der ersten freien Spalte in Zeile 1 suchen. ;-)
aber nun kommts....
1. Das Format in Zeile 1 passt nicht
2. Die erste freie Spalte wird nach wie vor erst in Spalte G gefunden, obwohl Spalte E und F frei sind
3. Die Daten werden ausschließlich in die Spalte G geschrieben... obwohl der nächste Versuche dann in H erscheinen sollte.
Den derzeit aktuellen Codeausschnitt habe ich hier mit eingefügt.
Als Anmerkung: Im "ELSE" ist das Blatt Fahrplan der Startabelle gemeint, nicht aus der angehängten Datei.
Gruß Burkhard
If Dir(strfilename1) = "" Then
Sheets("Fahrplan").Copy
ActiveWorkbook.SaveAs _
Filename:=strfilename1
ActiveSheet.Copy after:=Sheets(Sheets.Count)
ActiveWorkbook.Sheets(2).Name = "Tabelle2"
Sheets("Fahrplan").Range("a2:g110").Copy
Sheets("Tabelle2").Range("a1:g109").PasteSpecial xlPasteValues
Sheets("Fahrplan").Activate
Range("d2:d97").FormulaLocal = "=SUMME(Tabelle2!D1:AZ1)"
ActiveWorkbook.Close savechanges:=True
Else
Sheets("Fahrplan").Range("d2:d97").Copy
Workbooks.Open Filename:=strfilename1, UpdateLinks:=3
Sheets("Tabelle2").Cells(Cells(Columns.Count).End(xlToLeft).Column + 1).PasteSpecial _
Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False
ActiveWorkbook.Close savechanges:=True

Anzeige
AW: Kopieren in erste Freie Spalte ab Zeile
22.03.2021 12:25:09
Regina
Hi,
aber hier:
Sheets("Tabelle2").Cells(Cells(Columns.Count).End(xlToLeft).Column + 1)
fehlt doch wieder die 5, für die 5. Zeile:
Sheets("Tabelle2").Cells(Cells(5,Columns.Count).End(xlToLeft).Column + 1)
Gruß Regina

AW: Kopieren in erste Freie Spalte ab Zeile
22.03.2021 12:44:12
Burkhard
Hallo Regina,
hatte ich ja geschrieben, ich habe es nun so gemacht, das die Daten in die erste Zeile eingefügt werden können. Daher hat sich die Suche ab Zeile 5 erledigt.
Nun ist es so, das die erste Zeile ab Spalte D leer ist.
Es wird aber Grundsätzlich nur die Spalte "G" als freie Spalte gefunden,
und wenn G gefüllt ist, müssten die Daten ja in Spalte H eingefügt werden, aber das passiert leider auch nicht.
Bin gerade verzweifelt...

Anzeige
AW: Kopieren in erste Freie Spalte ab Zeile
22.03.2021 12:48:31
Regina
...ok, begriffen...dann musst Du aber auch Zeile 1 angeben:
Sheets("Tabelle1").Cells(1, Columns.Count).End(xlToLeft).Column + 1
Gruß Regina

AW: Kopieren in erste Freie Spalte ab Zeile
22.03.2021 13:09:32
Burkhard
Sheets("Tabelle2").Cells(1, Columns.Count).End(xlToLeft).Column + 1.PasteSpecial _
Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False
Wenn ich das so einsetze, dann bekomme ich mecker...
Da steht dann:
Fehler beim Kompilieren:
erwartet: Anweisungsende
Da sollen ja dann die Werte eingefügt werden ohne Formeln oder Ähnlichem.
Gruß Burkhard

Anzeige
AW: Kopieren in erste Freie Spalte ab Zeile
22.03.2021 13:32:15
Regina
... sorry, wenn man sich erstmal verheddert hat ...
müsste so passen:
Sheets("Tabelle2").Cells(1, Cells(1, Columns.Count).End(xlToLeft).Column + 1).PasteSpecial _
Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False

AW: Kopieren in erste Freie Spalte ab Zeile
22.03.2021 14:03:57
Burkhard
So, nun bekomme ich eine Fehlermeldung mehr.
das (hoffentlich) letzte Problem ist nun noch...
Mit dem Code kommt er bei der Suche nur bis zur Spalte E.
Bei allen folgenden Durchläufen wird Spalte E überschrieben.
Else
Sheets("Fahrplan").Range("d2:d97").Copy
Workbooks.Open Filename:=strfilename1, UpdateLinks:=3
Sheets("Tabelle2").Cells(2, Cells(2, Columns.Count).End(xlToLeft).Column + 1).PasteSpecial _
Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False
ActiveWorkbook.Close savechanges:=True
Kann es an der Formatierung liegen? Die Striche ersetzen eine Null, der Übersichtlichkeit wegen.
Datum von bis BHKW_1 [kW]
22.03.2021 0:00 0:15 --- ---
22.03.2021 0:15 0:30 --- ---

Anzeige
AW: Kopieren in erste Freie Spalte ab Zeile
22.03.2021 14:04:47
Burkhard
  • Datum von bis BHKW_1 [kW]
    22.03.2021 0:00 0:15 --- ---
    22.03.2021 0:15 0:30 --- ---
    22.03.2021 0:30 0:45 --- ---


  • AW: Kopieren in erste Freie Spalte ab Zeile
    22.03.2021 14:06:42
    Burkhard
    ich bekomme die Spalten hier leide rnicht richtig dargestellt :-(
    Spalte A beinhaltet das Datum
    Spalte B die Zeit von
    Spalte C die Zeit bis
    Spalte D BHKW_1[kW]
    ab Spalte e ohen Überschrift

    Anzeige
    AW: Kopieren in erste Freie Spalte ab Zeile
    22.03.2021 14:25:46
    Burkhard
    Leider noch ein Nachtrag....
    Habe gerade festgestellt, das er die Werte in Spalte D auch jedesmal überschreibt. :-(
    Ich verzweifel.....

    AW: Kopieren in erste Freie Spalte ab Zeile
    22.03.2021 14:27:46
    Regina
    ... wenn Spalte E keine Überschrift hat, also leer ist, und in Zeile 1 die erste leere Spalte ermittelt wird, ist klar, dass immer E dabei raus kommt.
    Ich verstehe das ganze noch nicht so ganz:
    Werden die Daten wirklich nebeneinander in eine Zeile eingefügt? Die Datensätze scheinen doch untereinander zu stehen.

    Anzeige
    AW: Kopieren in erste Freie Spalte ab Zeile
    22.03.2021 14:39:13
    Burkhard
    Also; die Daten sind folgendermaßen aufgebaut.
    ein Datensatz sind immer 96 - 100 Werte, die untereinanderstehen.
    In den ersten drei Spalten sind Datum Beginn- und Endezeit angegeben.
    Die erste Datenspalte "E" wird mit dem ersten kopieren gefüllt.
    Danach werden nur noch die 96 - 100 Werte aus einer anderen Tabelle kopiert und
    in dieses Blatt (Tabelle2) in der ersten freien Spalte eingefügt.
    Beim nächsten Mal wieder 96 Werte in die nächste freie Spalte usw.
    Im Tabellenblatt 1 (Fahrplan) werden diese summiert.
    Die Suche habe ich jetzt wieder auf die zweite Zeile gestellt.
    Sheets("Tabelle2").Cells(2, Cells(2, Columns.Count).End(xlToLeft).Column + 1).PasteSpecial _
    Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False
    
    Die Werte bestehen entweder aus Zahlen oder aus "---"
    Aber wie eben schon geschrieben, es wird beim einfügen durch das Script sogar die bestehenden Daten überschrieben.

    Anzeige
    AW: Kopieren in erste Freie Spalte ab Zeile
    22.03.2021 16:56:20
    Regina
    ...ok, noch eine Idee:
    Das zweite Cells-Objekt bezieht sich auf das aktive Blatt, nicht auf Tabelle2. Teste mal so:
    Sheets("Tabelle2").Cells(2, Sheets("Tabelle2").Cells(2, Columns.Count).End(xlToLeft).Column + 1).PasteSpecial _
    Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False

    Anzeige
    AW: Kopieren in erste Freie Spalte ab Zeile
    22.03.2021 17:10:46
    Burkhard
    Hallo Regina,
    ich habe jetzt provisorisch eine etwas umständlichere aber für mich einfache Variante gewählt, da die Datei benötigt wird bei uns.
    Ich werde deinen Vorschlag aber noch testen, dafür brauche ich jetzt aber ein paar Tage.
    Bis hierhin sage ich ganz doll Danke mit einem Strauß Blumen und einer Schokolade.
    Ich melde mich hier bald wieder zurück ob es funktioniert hat.
    Gruß Burkhard
    Anzeige
    ;
    Anzeige
    Anzeige

    Infobox / Tutorial

    Werte in die erste freie Spalte ab Zeile 5 einfügen


    Schritt-für-Schritt-Anleitung

    Um Werte in die erste freie Spalte ab einer bestimmten Zeile (z.B. Zeile 5) in Excel per VBA einzufügen, folge diesen Schritten:

    1. VBA-Editor öffnen:

      • Drücke ALT + F11, um den VBA-Editor zu öffnen.
    2. Modul erstellen:

      • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei)", wähle Einfügen und dann Modul.
    3. Code einfügen:

      • Füge den folgenden VBA-Code in das Modul ein:
      Sub WerteEinfügen()
         Dim strfilename1 As String
         strfilename1 = "Pfad\zu\deiner\Datei.xlsx" ' Passe den Pfad an
         Sheets("Fahrplan").Range("d2:d97").Copy
         Workbooks.Open Filename:=strfilename1, UpdateLinks:=3
         Sheets("Tabelle2").Cells(5, Cells(5, Columns.Count).End(xlToLeft).Column + 1).PasteSpecial _
         Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False
         ActiveWorkbook.Close savechanges:=True
      End Sub
    4. Anpassen der Zeile:

      • Stelle sicher, dass die Zeilennummer (in diesem Fall 5) angepasst wird, je nachdem, wo du die Werte einfügen möchtest.
    5. Ausführen des Codes:

      • Schließe den VBA-Editor und führe das Makro über ALT + F8 aus.

    Häufige Fehler und Lösungen

    • Fehler beim Kompilieren:

      • Stelle sicher, dass die Syntax korrekt ist und keine Zeilen fehlen. Überprüfe, ob alle Klammern und Anweisungen geschlossen sind.
    • Daten werden in die falsche Spalte eingefügt:

      • Achte darauf, dass die Berechnung der ersten freien Spalte korrekt ist. Verwende Cells(5, Columns.Count).End(xlToLeft).Column + 1, um sicherzustellen, dass ab Zeile 5 gesucht wird.
    • Werte werden überschrieben:

      • Überprüfe, ob die Spalten in Zeile 5 wirklich leer sind, bevor du neue Werte einfügst. Es ist wichtig, dass du sicherstellst, dass die Zellen, in die du schreibst, auch tatsächlich frei sind.

    Alternative Methoden

    Eine alternative Methode, um Werte in die erste freie Spalte einzufügen, könnte die Verwendung von Excel-Formeln sein. Du kannst die Formel =WENN(A2="";"";A2) in den Zellen verwenden, um leere Zellen zu ignorieren.

    Zusätzlich könnte die Verwendung von Range.Find in VBA hilfreich sein, um die erste leere Zelle in einer bestimmten Zeile zu finden.


    Praktische Beispiele

    Hier ist ein Beispiel für das Einfügen von Werten in die erste freie Spalte ab Zeile 5:

    Sub BeispielEinfügen()
        Dim ws As Worksheet
        Set ws = ThisWorkbook.Sheets("Tabelle2")
    
        ' Kopiere Werte
        Sheets("Fahrplan").Range("d2:d97").Copy
    
        ' Finde die erste freie Spalte ab Zeile 5
        Dim spalte As Long
        spalte = ws.Cells(5, Columns.Count).End(xlToLeft).Column + 1
    
        ' Füge die kopierten Werte ein
        ws.Cells(5, spalte).PasteSpecial Paste:=xlValues
        Application.CutCopyMode = False
    End Sub

    Tipps für Profis

    • Verwende Application.ScreenUpdating = False: Dies kann die Ausführungsgeschwindigkeit des Makros erhöhen, indem es das Bildschirm-Rendering während der Ausführung deaktiviert.

    • Fehlerbehandlung einfügen: Nutze On Error Resume Next, um den Code robuster zu machen und unerwartete Fehler abzufangen.

    • Makros dokumentieren: Kommentiere deinen Code ausführlich, damit du und andere Benutzer verstehen, was jeder Teil des Codes macht.


    FAQ: Häufige Fragen

    1. Wie finde ich die erste freie Spalte in einer anderen Zeile? Du kannst das gleiche Prinzip verwenden, indem du die Zeilennummer in der Cells-Funktion änderst, z.B. Cells(10, Columns.Count).End(xlToLeft).Column + 1 für Zeile 10.

    2. Was tun, wenn die Daten in der falschen Datei eingefügt werden? Überprüfe den Pfad zur Datei und stelle sicher, dass die richtige Arbeitsmappe geöffnet ist, bevor du die Daten einfügst.

    3. Kann ich das Makro auch für andere Tabellen verwenden? Ja, passe einfach die Namen der Arbeitsblätter im Code an, um das Makro für verschiedene Tabellen zu verwenden.

    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