Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

.Cells(Rows.Count, "B").End(xlUp).Row

Forumthread: .Cells(Rows.Count, "B").End(xlUp).Row

.Cells(Rows.Count, "B").End(xlUp).Row
SaSchu
Hallo zusammen,
ohne Eure Hilfe komme ich nicht weiter.
Ich habe eine Tabelle aus der Daten in eine andere Datei kopiert werden sollen. Dazu gibt es ein Makro das das Öffnen einer zusätzlichen (Ziel-)Datei bewirkt. Dann wird in dieser Datei eine bestimmte Zeile gesucht und dann 1000 Zeilen gelöscht (nur als Sicherheit, falls die Datei mal aus Versehen überspeichert wurde). Das klappt bis dahin auch alles. Nun soll aber der eigentliche Kopiervorgang passieren. Und zwar in dem ich bestimmte Spalten der Quelldatei in die Zieldatei kopiere.
So soll z. B. B3 bis ENDE (nur benutzte Zeilen) kopiert werden und dann der Inhalt in die Zeile nach der Zeile in der Nr steht eingefügt werden. In diesem Fall (aber eher die Ausnahme) auch in Spalte B.
Vorgestellt hatte ich mir das Ganze so, aber der Kopierteil funktioniert nicht:
Sub kopieren()
Dim oXlSM As Workbook, oXML As Workbook
Const sListZeichen$ = "• "
Dim i, j, k As Long
Dim Lz As Long
Dim vntDatNam As Variant
Application.ScreenUpdating = False
Const sNeuerPfad As String = "\\xxx.xxx.xx.xx\Projekte\"
If ChDirUNC(sNeuerPfad) Then
Do
MsgBox "Bitte öffnen Sie die passende Datei."
vntDatNam = Application.GetOpenFilename("XML-Dateien (*.xml), *.xml")
If vntDatNam = False Then
If MsgBox("Wollen Sie die Anwendung hier abbrechen?", vbYesNo, "Abbruch?") = vbYes  _
Then
MsgBox "Die Ausführung wird auf Ihren Wunsch abgebrochen!", vbCritical, "Abbruch!"
Exit Sub
End If
End If
Loop Until vntDatNam  False
Else
MsgBox "Die Ausführung wird wegen eines Fehlers abgebrochen!", vbCritical, "Fehler!"
End If
Set oXML = Workbooks.Open(Filename:=vntDatNam)
Set oXlSM = ThisWorkbook 'ThisWorkbook = die xlsm-Datei, in der dieser Code steht
With Sheets("neue Zustandsbeschreibungen")
For i = .Cells(65536, 1).End(xlUp).Row To 1 Step -1
If .Cells(i, 1).Text = "Nr" Then j = i
Next i
For k = 1000 To j + 1 Step -1
Rows(k).EntireRow.Delete
Next k
End With
With oXlSM.Sheets("Mängel vor der Abnahme")
Lz = .Cells(Rows.Count, "B").End(xlUp).Row
Range("B3:B" & Lz).Copy oXML.Sheets("neue Zustandsbeschreibungen").Range(k, 2)
End With
Application.ScreenUpdating = True
End Sub

Ich bekomme dann die Fehlermeldung:
Laufzeifehler '1004':
Anwendungs- oder objektdefinierter Fehler
Die Meldung bezieht sich auf diese Zeile:
Range("B3:B" & Lz).Copy oXML.Sheets("neue Zustandsbeschreibungen").Range(k, 2)
Erkennen kann ich nur Lz = 1000 und k = 64. Wobei k eigentlich 65 sein muss, denn in j (Zeile 64 steht Nr.).
Könnt Ihr meinen Fehler entdecken?
Vielen Dank & Gruß
SaSchu
Anzeige
AW: .Cells(Rows.Count, "B").End(xlUp).Row
15.08.2011 11:54:01
Josef

Hallo Sascha,
da fehlt der Punkt.
.Range("B3:B" & Lz).Copy .....


« Gruß Sepp »

Anzeige
AW: .Cells(Rows.Count, "B").End(xlUp).Row
15.08.2011 12:09:53
SaSchu
Hallo Sepp,
danke, habe ihn ergänzt. Blöd von mir!
Leider habe ich nach wie vor die gleiche Fehlermeldung, an der gleichen Stelle. :(
Hast Du noch eine Idee?
Danke & Gruß
SaSchu
AW: .Cells(Rows.Count, "B").End(xlUp).Row
15.08.2011 12:23:40
Josef

Hallo Sascha,
".range(k, 2)" kann nicht funktionieren.
.Range("B3:B" & Lz).Copy oXML.Sheets("neue Zustandsbeschreibungen").Cells(k, 2)

« Gruß Sepp »

Anzeige
AW: .Cells(Rows.Count, "B").End(xlUp).Row
15.08.2011 12:42:50
SaSchu
Hallo Sepp,
das war es. Nur habe ich jetzt ein großes Problem nicht berücksichtigt. Es dürfen nur Werte eingefügt werden. Keine Formatirungen, Formeln etc.
Kannst und magst Du mir dabei auch noch einmal helfen?
Danke & Gruß
SaSchu
....PasteSpecial Paste:=xlValues
15.08.2011 13:16:43
SaSchu
Hallo Sepp,
ich noch einmal.
Habe gehofft das es hiermit klappt:
.Range("B3:B" & Lz).Copy oXML.Sheets("neue Zustandsbeschreibungen").Cells(j + 1, 2).PasteSpecial Paste:=xlValues
Aber auch da gibt es irgendeinen Fehler?!
"Erwartet Anweisungsende".
Wirst Du daraus schlau?
Gruß
SaSchu
Anzeige
AW: ....PasteSpecial Paste:=xlValues
15.08.2011 15:48:42
Josef

Hallo Sascha,
das kann man nicht in eine Zeile schreiben.

.Range("B3:B" & Lz).Copy
oXML.Sheets("neue Zustandsbeschreibungen").Cells(j + 1, 2).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False


« Gruß Sepp »

Anzeige
AW: ....PasteSpecial Paste:=xlValues
16.08.2011 10:45:09
SaSchu
Hallo Sepp,
PERFEKT!!!
1.000-Dank!!!
Noch eine (vorerst) letzte Frage... ich muss nun einige Spalten hin und her kopieren. Aber nicht immer b nach b, c nach c usw. sondern auch f nach m usw.
Muss ich für jede Spalte diesen Coe komplett nehmen und anpassaen oder kann ich das auch zusammenfassen?
Danke und Gruß
SaSchu
Anzeige
AW: ....PasteSpecial Paste:=xlValues
16.08.2011 19:47:57
Josef

Hallo Sascha,
vom Prinzip her, musst du das für jeden Bereich separat machen, außer das "Application.CutCopyMode = False" brauchst du nur einmal zum Schluss.
Man kann natürlich in einer Schleife die Bereiche abarbeiten, das hängt aber von deinen Anforderungen ab.

« Gruß Sepp »

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Zeilen in Excel mit .Cells(Rows.Count, "B").End(xlUp).Row ermitteln und kopieren


Schritt-für-Schritt-Anleitung

Um in Excel VBA die letzte benutzte Zeile einer bestimmten Spalte zu ermitteln und Daten zu kopieren, kannst Du die folgende Schritt-für-Schritt-Anleitung nutzen:

  1. Öffne den Visual Basic Editor (ALT + F11).

  2. Füge ein neues Modul hinzu: Rechtsklick auf „VBAProject (DeineDatei)“ > Einfügen > Modul.

  3. Kopiere und füge den folgenden Code ein:

    Sub kopieren()
        Dim oXlSM As Workbook, oXML As Workbook
        Dim Lz As Long
        Dim vntDatNam As Variant
        Application.ScreenUpdating = False
    
        ' Ziel-Datei öffnen
        vntDatNam = Application.GetOpenFilename("Excel-Dateien (*.xlsx), *.xlsx")
        If vntDatNam = False Then Exit Sub
        Set oXML = Workbooks.Open(Filename:=vntDatNam)
        Set oXlSM = ThisWorkbook
    
        ' Bestimme die letzte benutzte Zeile in Spalte B
        Lz = oXlSM.Sheets("Mängel vor der Abnahme").Cells(Rows.Count, "B").End(xlUp).Row
    
        ' Kopiere die Daten
        oXlSM.Sheets("Mängel vor der Abnahme").Range("B3:B" & Lz).Copy
        oXML.Sheets("neue Zustandsbeschreibungen").Cells(1, 1).PasteSpecial Paste:=xlValues
    
        Application.CutCopyMode = False
        Application.ScreenUpdating = True
    End Sub
  4. Passe den Code an: Ändere die Namen der Blätter und den Zielbereich nach Deinen Bedürfnissen.

  5. Führe das Makro aus: Klicke im Editor auf „Run“ (oder drücke F5).


Häufige Fehler und Lösungen

  1. Laufzeitfehler '1004':

    • Problem: „Anwendungs- oder objektdefinierter Fehler“.
    • Lösung: Stelle sicher, dass Du den Punkt vor .Range nicht vergisst. Korrekt: .Range("B3:B" & Lz).
  2. Kopieren von Werten funktioniert nicht:

    • Problem: „Erwartet Anweisungsende“.
    • Lösung: Trenne die Zeilen beim Kopieren und Einfügen:

      .Range("B3:B" & Lz).Copy
      oXML.Sheets("neue Zustandsbeschreibungen").Cells(j + 1, 2).PasteSpecial Paste:=xlPasteValues
  3. Problem mit leeren Zeilen:

    • Lösung: Überprüfe, ob die letzte Zeile korrekt ermittelt wird. Nutze .Cells(Rows.Count, "B").End(xlUp).Row um die Anzahl der Zeilen zu zählen.

Alternative Methoden

  • Anstelle des Kopierens von Werten kannst Du auch direkt die Werte zuweisen:

    Dim i As Long
    For i = 3 To Lz
        oXML.Sheets("neue Zustandsbeschreibungen").Cells(i, 2).Value = oXlSM.Sheets("Mängel vor der Abnahme").Cells(i, 2).Value
    Next i
  • Diese Methode ist nützlich, wenn Du keine Formatierungen oder Formeln übertragen möchtest.


Praktische Beispiele

Hier sind einige praktische Beispiele, die Dir helfen, die .Cells(Rows.Count, "B").End(xlUp).Row Funktion zu verstehen:

  1. Ermitteln der letzten benutzten Zeile in Spalte A:

    Dim letzteZeile As Long
    letzteZeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
  2. Kopieren von Daten aus mehreren Spalten:

    Dim spalten As Variant
    spalten = Array(1, 2, 3) ' A, B, C
    Dim col As Variant
    For Each col In spalten
        oXlSM.Sheets("Mängel vor der Abnahme").Range(Cells(3, col), Cells(Lz, col)).Copy
        oXML.Sheets("neue Zustandsbeschreibungen").Cells(1, col).PasteSpecial Paste:=xlValues
    Next col

Tipps für Profis

  • Vermeide Bildschirmaktualisierungen: Schalte Application.ScreenUpdating = False ein, um die Verarbeitung zu beschleunigen.

  • Verwende With-Blöcke: Das reduziert den Code und macht ihn lesbarer. Beispiel:

    With oXlSM.Sheets("Mängel vor der Abnahme")
        Lz = .Cells(Rows.Count, "B").End(xlUp).Row
    End With
  • Fehlerbehandlung: Implementiere On Error Resume Next für eine bessere Fehlerkontrolle.


FAQ: Häufige Fragen

1. Wie kann ich die letzte benutzte Zeile in einer anderen Spalte ermitteln? Um die letzte benutzte Zeile in einer anderen Spalte zu ermitteln, ändere einfach den Buchstaben in der End(xlUp)-Funktion:

Lz = Cells(Rows.Count, "A").End(xlUp).Row

2. Was mache ich, wenn ich eine Fehlermeldung beim Kopieren erhalte? Überprüfe, ob der Zielbereich im Zielblatt existiert und ob Du die richtige Syntax verwendest. Nutze .Cells anstelle von .Range, um spezifische Zellen zu adressieren.

3. Kann ich mehrere Bereiche gleichzeitig kopieren? Ja, Du kannst eine Schleife verwenden, um mehrere Bereiche in einem Durchgang zu kopieren und zuzuweisen.

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