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

Forumthread: VBA, erste und letzte Zeile auslesen

VBA, erste und letzte Zeile auslesen
12.04.2020 09:39:48
Frederik
Hallo liebe Community,
ich habe folgenden Code, der jedoch nicht korrekt arbeitet. Wenn ich nur die Funktion mit der letzten Zeile mitlaufen lasse, dann arbeitet es gut, jedoch werden leere Bereiche mit kopiert.
Mit der Definition der ersten Zeile hackt der Code total lange fest und überträgt dann immer nur die letzte Zeile. Hat jemand eine Idee?

Dim anzahl As Integer anzahl = ActiveWorkbook.Worksheets.Count Dim Zeile&, letzteZ&, ersteZ&
For i = 6 To anzahl
With Worksheets(i)
.AutoFilterMode = False
letzteZ = .Cells(Rows.Count, 3).End(xlUp).Row
ersteZ = .Cells(Rows.Count, 3).End(xlDown).Row
Zeile = Worksheets("Datenpool").Cells(Rows.Count, 6).End(xlUp).Row + 1
'.Range("A6:u" & letzteZ).Copy
.Range("A" & ersteZ & ":" & "U" & letzteZ).Copy
Worksheets("Datenpool").Range("A" & Zeile).PasteSpecial Paste:= _
xlPasteValuesAndNumberFormats
End With
Next

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA, erste und letzte Zeile auslesen
12.04.2020 09:59:46
Regina
Hi,
Du versuchst hier:
 ersteZ = .Cells(Rows.Count, 3).End(xlDown).Row
von der letzten Zeile des Blattes abwärts zu springen, nur, da ist dann nichts mehr.
Versuche es mal so:
 ersteZ = .Cells(1, 3).End(xlDown).Row
Gruß Regina
Anzeige
AW: VBA, erste und letzte Zeile auslesen
12.04.2020 10:59:38
Herbert
Hallo Frederik,
in der Variablen "Anzahl" zählst du auch das "Worksheets("Datenpool")" mit und mit "For i" kommst du dann auch in dieses Sheet und kopierst daraus etwas wieder da rein! Ist das so gewollt?
Servus
AW: VBA, erste und letzte Zeile auslesen
12.04.2020 11:51:16
hary
Moin
Einen hab ich auch noch. Versuch mal.
Dim rngLetzte As Range, rngErste As Range
Dim anzahl As Long, i As Long, Zeile As Long
Application.ScreenUpdating = False
anzahl = ActiveWorkbook.Worksheets.Count
For i = 1 To 1 '6 To anzahl
Zeile = Worksheets("Datenpool").Cells(Rows.Count, 6).End(xlUp).Row + 1
With Worksheets(i)
.AutoFilterMode = False
Set rngLetzte = .Range("C:C").Find(what:="*", after:=Range("C1"), searchdirection:= _
xlPrevious)
Set rngErste = .Range("C:C").Find(what:="*", after:=rngLetzte, searchdirection:= _
xlNext)
.Range(Cells(rngErste.Row, "A"), Cells(rngLetzte.Row, "U")).Copy
Worksheets("Datenpool").Range("A" & Zeile).PasteSpecial Paste:= _
xlPasteValuesAndNumberFormats
End With
Next

gruss hary
Anzeige
AW: variable Zeilen mit VBA einblenden
15.04.2020 12:30:10
Stephanie
Hallo Herbert, ich hab den falschen Link zum Antworten bekommen:
Eingegangene Nachricht (hier kannst Du antworten):
https://www.herber.de/forum/messages/1750276.html
es betrifft aber diesen meinen Beitrag:
Archivdatei (hier ist kein Antworten möglich):
https://www.herber.de/forum/archiv/1748to1752/t1749831.htm
Erkläre mir bitte warum du in einem Tresor noch einmal einen Tresor einbauen willst!
Meine Antwort: Es geht um eine Preisliste. Dort gibt es je Programm unterschiedliche Dienstleistungen. Wenn also Programm A aktiviert ist, soll Reiter A und Dienstleistungen A auf einem anderen Sheet eingeblendet werden. Genau so erscheint dann je eine Zeile für Programm A im Summen-Sheet. Deshalb brauche ich Zeilenbereiche, und nicht fixe Zeilen zum Aus-/Einblenden. LG Stephanie
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Erste und letzte Zeile in Excel VBA auslesen


Schritt-für-Schritt-Anleitung

Um die erste und letzte Zeile in einem Excel-Arbeitsblatt mit VBA auszulesen, kannst du folgende Schritte befolgen:

  1. Öffne den Visual Basic for Applications (VBA) Editor:

    • Drücke ALT + F11 in Excel.
  2. Füge ein neues Modul hinzu:

    • Klicke auf Einfügen und wähle Modul.
  3. Füge den folgenden Code ein:

    Sub ErsteUndLetzteZeileAuslesen()
       Dim letzteZ As Long
       Dim ersteZ As Long
    
       ' Letzte gefüllte Zeile in Spalte C ermitteln
       letzteZ = Cells(Rows.Count, 3).End(xlUp).Row
    
       ' Erste gefüllte Zeile in Spalte C ermitteln
       ersteZ = Cells(1, 3).End(xlDown).Row
    
       ' Ausgabe der Ergebnisse
       MsgBox "Erste Zeile: " & ersteZ & vbNewLine & "Letzte Zeile: " & letzteZ
    End Sub
  4. Führe das Makro aus:

    • Drücke F5, während der Cursor im Code steht, um das Makro auszuführen.

Dieser Code ermittelt die erste und letzte Zeile in Spalte C und gibt die Werte in einer Meldung aus. Hierbei wird die Funktion End(xlUp) verwendet, um die letzte Zeile zu finden, und die Funktion End(xlDown), um die erste Zeile zu bestimmen.


Häufige Fehler und Lösungen

  1. Problem: Der Code gibt immer die letzte Zeile aus, auch wenn die erste Zeile nicht korrekt ermittelt wird.

    • Lösung: Stelle sicher, dass du bei der Ermittlung der ersten Zeile mit Cells(1, 3).End(xlDown) beginnst, anstatt von der letzten Zeile des Blattes zu starten.
  2. Problem: Es werden leere Zellen mit kopiert.

    • Lösung: Achte darauf, dass du die richtige Range für das Kopieren angibst. Wenn du leere Zellen vermeiden möchtest, nutze die Find-Methode, um nur gefüllte Zellen zu kopieren.

Alternative Methoden

Eine alternative Methode zur Ermittlung der ersten und letzten Zeile in Excel ist die Verwendung der Find-Methode, um die letzte gefüllte Zeile in einer bestimmten Spalte zu finden. Hier ein Beispiel:

Dim rngLetzte As Range, rngErste As Range

Set rngLetzte = Range("C:C").Find(what:="*", after:=Range("C1"), searchdirection:=xlPrevious)
Set rngErste = Range("C:C").Find(what:="*", after:=rngLetzte, searchdirection:=xlNext)

Mit dieser Methode kannst du sicherstellen, dass du nur die tatsächlich gefüllten Zeilen berücksichtigst und somit die letzte Zeile in Excel mit VBA präzise ermitteln kannst.


Praktische Beispiele

Hier ist ein praktisches Beispiel, das sowohl die erste als auch die letzte Zeile in einer Tabelle ausliest und die Werte in ein anderes Arbeitsblatt kopiert:

Sub KopierenErsteLetzteZeile()
    Dim rngLetzte As Range, rngErste As Range
    Dim Zeile As Long

    Application.ScreenUpdating = False
    With Worksheets("Daten")
        Set rngLetzte = .Range("C:C").Find(what:="*", after:=Range("C1"), searchdirection:=xlPrevious)
        Set rngErste = .Range("C:C").Find(what:="*", after:=rngLetzte, searchdirection:=xlNext)
        Zeile = Worksheets("Ziel").Cells(Rows.Count, 1).End(xlUp).Row + 1
        .Range(Cells(rngErste.Row, 1), Cells(rngLetzte.Row, 21)).Copy
        Worksheets("Ziel").Range("A" & Zeile).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
    End With
    Application.ScreenUpdating = True
End Sub

In diesem Beispiel wird das gesamte Datenfeld zwischen der ersten und der letzten Zeile in das Arbeitsblatt "Ziel" kopiert.


Tipps für Profis

  • Nutze die Find-Methode, um die letzte gefüllte Zeile effizienter zu ermitteln und leere Zellen zu vermeiden.
  • Halte deine VBA-Prozeduren modular, indem du kleinere Subroutinen für bestimmte Aufgaben erstellst.
  • Verwende Application.ScreenUpdating = False, um die Ausführung zu beschleunigen und Flackern im Excel-Fenster zu verhindern.

FAQ: Häufige Fragen

1. Frage
Wie kann ich die erste Zeile in mehreren Spalten gleichzeitig ermitteln?
Antwort: Du kannst die Find-Methode für jede Spalte einzeln anwenden oder eine Schleife verwenden, um alle gewünschten Spalten zu durchlaufen.

2. Frage
Was ist der Unterschied zwischen .End(xlUp) und .End(xlDown)?
Antwort: .End(xlUp) sucht von der letzten Zeile nach oben und findet die letzte gefüllte Zeile, während .End(xlDown) von der ersten Zeile nach unten sucht, um die erste gefüllte Zeile zu finden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige