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

Forumthread: Range mit Variable für End(xlUp)

Range mit Variable für End(xlUp)
25.09.2014 16:12:06
Christian
Hallo zusammen,
wer kann mir helfen?
Kurz: Ich möchte die letzte Zeile in einem Tabellenbereich finden, um die darüberliegende Zeile an diese Stelle zu kopieren. Unter diesem Tabellenbereich sind jedoch weitere Zellen belegt.
Prinzipiell würde ich dafür mit
A = Range ("A14").End(xlUp).Row - 1 arbeiten. Leider ist der Range aber dann aufgebraucht, wenn ich die Zeile das erste mal kopiert habe.
Es müsste also mit Variablen gelöst werden:
A = Cells(2,i+1).End(xlUp).Row -1
Aber wie kann ich das brauchbar umsetzen?
Wenn ich also mit einer Schleife arbeite,
Besten Dank!

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range mit Variable für End(xlUp)
25.09.2014 18:39:05
Gerold
Hallo Christian
Zeilennummer innerhalb der Schleife ermitteln.

'zum Beispiel 5 mal
for  b = 1 to 5
'Letzte zeilenummer ermitteln
A = Range ("A14").End(xlUp).Row - 1
' code zum Kopieren
next
Gruß Gerold
Rückmeldung wäre nett.

Anzeige
AW: Range mit Variable für End(xlUp)
26.09.2014 11:18:34
Christian
Danke Gerold,
mein Problem ist nur leider noch nicht ganz klar geworden.
Ich erläutere kurz die Funktion:
Ausführung des Makros: letzte Zeile im Bereich suchen, vorletzte Zeile an diese Stelle kopieren
Erneutes Ausführung des Makros: letzte Zeile im Bereich suchen (Achtung: Diese muss nun einen veränderten Range haben), vorletzte Zeile an diese Stelle kopieren.
Dadurch, dass die Range, in der die letzte Zeile gesucht werden soll, auch immer größer wird, muss ich das in meine Variable einbauen, und dafür suche ich eine Funktion.
Danke!

Anzeige
AW: Range mit Variable für End(xlUp)
26.09.2014 16:15:40
Gerold
Hallo Christian
Etwa so?

Sub TabellenErweitern()
Dim a As Long, b As Long
'zb 5 mal Kopieren
For b = 1 To 5
'Letzte zeilenummer ermitteln
a = ActiveSheet.Range("A14").End(xlUp).Row
'Zeile Einfügen/Anhängen - wenn nicht gewünscht die Zeile löschen
ActiveSheet.Cells(a + 1, 1).EntireRow.Insert
'Zeile Kopieren
ActiveSheet.Cells(a - 1, 1).EntireRow.Copy
'Kopiertes Einfügen
ActiveSheet.Cells(a + 1, 1).Select
ActiveSheet.Paste
Next
End Sub
Gruß Gerold
Rückmeldung wäre nett.

Anzeige
AW: Range mit Variable für End(xlUp)
29.09.2014 14:43:24
Christian
Hallo Gerold,
dein Code ist sehr verständlich, danke dafür.
Jedoch muss ich eine Anmerkung hineinsetzen, um mein Problem nochmals zu erläutern.
Ich möchte, dass die Range variabel ist.

Sub TabellenErweitern()
Dim a As Long, b As Long
'zb 5 mal Kopieren
For b = 1 To 5
'Letzte zeilenummer ermitteln => die letzte Zeile verändert sich mit jedem Schleifendurchlauf
'for b=1 =>    a = ActiveSheet.Range("A14").End(xlUp).Row
'for b=2 =>    a = ActiveSheet.Range("A15").End(xlUp).Row
'for b=3 =>    a = ActiveSheet.Range("A16").End(xlUp).Row
'for b=x =>    a = ActiveSheet.Range("Ax").End(xlUp).Row
a = ActiveSheet.Range("A14").End(xlUp).Row
'Zeile Einfügen/Anhängen - wenn nicht gewünscht die Zeile löschen
ActiveSheet.Cells(a + 1, 1).EntireRow.Insert
'Zeile Kopieren
ActiveSheet.Cells(a - 1, 1).EntireRow.Copy
'Kopiertes Einfügen
ActiveSheet.Cells(a + 1, 1).Select
ActiveSheet.Paste
Next
End Sub
Meine Idee wäre deshalb anstelle der Range mit Cells direkt zu arbeiten

'for b=1 =>    a = ActiveSheet.Cells(1,14+b)End(xlUp).Row
Jedoch wird bei jedem Start des Makros die Schleife neu gestartet, somit fängt die Varible b immer bei 1 an. Sie soll aber bei der letzten gemerkten freien Zelle anfagen...
Hast du noch eine Idee oder ist mein Problem deutlicher geworden?

Anzeige
AW: Range mit Variable für End(xlUp)
29.09.2014 18:22:08
Gerold
Hallo Christian
durch
a = ActiveSheet.Range("A14").End(xlUp).Row
wird die letzte Zeile doch jedesmal wieder neu berechnet
Mit deinem Voerschlag
a = ActiveSheet.Cells(1,14+b).End(xlUp).Row
erhälst du immer für a eine 1 weil
ActiveSheet.Cells(zeile(bei dir die 1),Spalte(bei dir spalte 14+b)).End(xlUp).Row
Stell doch mal eine Beispieltabelle rein damit man sich mal ein Bild machen kann
was, wann und wo kopiert werden soll.
Gruß Gerold
Rückmeldung wäre nett.

Anzeige
AW: Range mit Variable für End(xlUp)
29.09.2014 23:06:44
Gerold
Hallo Christian
Hab da mal ein Beispiel hochgeladen
https://www.herber.de/bbs/user/92890.xlsm
Teste mal Seite "Beispiel 2"
Mfg Gerold
Rückmeldung wäre nett.

AW: Range mit Variable für End(xlUp)
30.09.2014 10:08:12
Christian
Hallo Gerold,
danke!
So funktioniert es. Die Schleife kann ich an dieser Stelle sogar weglassen.
Mein Denkfehler war, dass ich bei End(xlUp) immer davon ausgegangen bin, dass er im angegebenen Range von unten nach oben sucht. Tatsächlich sucht er aber von oben nach unten, und klar gibt es immer eine Leerzeile, wenn ich eine weitere Zeile einfüge...
So funktioniert mein Befehl.
Als nächstes werde ich es noch optimieren, dass der Zelleninhalt gelöscht wird (benötige nämlich nur die Formeln) und dass das Makro automatisch ausgeführ wird, wenn in der vorletzt-beschriebenenen Zeile in Zelle x eine Eingabe mit Enter bestätigt wird.

Anzeige
AW: Range mit Variable für End(xlUp)
30.09.2014 11:09:49
Gerold
Hallo Christian
"dass er im angegebenen Range von unten nach oben sucht"
Die Suchrichtung kann man selbst bestimmen
z.B.
- Range("A1").End(xlDown).Row --> suche nach unten
- Range("A100").End(xlUp).Row --> suche nach oben"
- Range("A100").End(xlToLeft).Row --> suche nach links"
- Range("A1").End(xlToRight ).Row --> suche nach rechts"
Gruß Gerold
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Dynamische Nutzung von Range mit End(xlUp) in VBA


Schritt-für-Schritt-Anleitung

Um die letzte Zeile in einem dynamischen Bereich zu finden, kannst du den folgenden VBA-Code verwenden. Dieser Code sucht die letzte beschriebene Zeile in einer Spalte und fügt eine neue Zeile ein:

Sub TabellenErweitern()
    Dim a As Long, b As Long
    ' Anzahl der gewünschten Kopiervorgänge
    For b = 1 To 5
        ' Letzte Zeilennummer ermitteln
        a = ActiveSheet.Range("A14").End(xlUp).Row
        ' Zeile Einfügen/Anhängen
        ActiveSheet.Cells(a + 1, 1).EntireRow.Insert
        ' Zeile Kopieren
        ActiveSheet.Cells(a - 1, 1).EntireRow.Copy
        ' Kopiertes Einfügen
        ActiveSheet.Cells(a + 1, 1).Select
        ActiveSheet.Paste
    Next
End Sub

In diesem Beispiel wird ActiveSheet.Range("A14").End(xlUp).Row verwendet, um die letzte Zeile von unten nach oben zu finden. Du kannst den Bereich anpassen, um verschiedene Spalten zu durchsuchen.


Häufige Fehler und Lösungen

  1. Problem: Der Code findet nicht die erwartete letzte Zeile.

    • Lösung: Stelle sicher, dass du den richtigen Bereich angibst. Der Befehl End(xlUp) startet von der angegebenen Zelle und sucht nach der letzten gefüllten Zelle in der angegebenen Richtung.
  2. Problem: Es wird immer die erste Zeile (1) zurückgegeben.

    • Lösung: Wenn du ActiveSheet.Cells(1, 14 + b).End(xlUp).Row verwendest, achte darauf, dass die Zeilennummer nicht konstant ist. Sie sollte dynamisch angepasst werden.

Alternative Methoden

Wenn du die End-Funktion verwenden möchtest, um nach unten oder nach links zu suchen, kannst du die folgenden Methoden anwenden:

  • Nach unten suchen:

    a = ActiveSheet.Range("A14").End(xlDown).Row
  • Nach links suchen:

    a = ActiveSheet.Range("B14").End(xlToLeft).Row
  • Nach rechts suchen:

    a = ActiveSheet.Range("A14").End(xlToRight).Row

Diese Methoden können in Kombination mit Schleifen verwendet werden, um verschiedene Abschnitte der Tabelle dynamisch zu bearbeiten.


Praktische Beispiele

Ein Beispiel, wie du mit End(xlUp) arbeiten kannst, um Daten effizient zu verwalten:

Sub DatenVerwalten()
    Dim letzteZeile As Long
    letzteZeile = ActiveSheet.Range("A14").End(xlUp).Row
    MsgBox "Die letzte gefüllte Zeile ist: " & letzteZeile
End Sub

Mit diesem Code erhältst du eine Meldung, die dir die letzte gefüllte Zeile in der Spalte A anzeigt.


Tipps für Profis

  • Nutze Application.ScreenUpdating = False, um die Bildschirmaktualisierung während der Ausführung des Makros zu deaktivieren. Das macht die Ausführung schneller und vermeidet Flackern.

  • Verwende With-Anweisungen, um den Code lesbarer zu gestalten:

    With ActiveSheet
      .Cells(a + 1, 1).EntireRow.Insert
      .Cells(a - 1, 1).EntireRow.Copy
      .Cells(a + 1, 1).PasteSpecial
    End With
  • Teste deinen Code immer mit einer Sicherungskopie deiner Arbeitsmappe, um Datenverlust zu vermeiden.


FAQ: Häufige Fragen

1. Frage
Wie kann ich die Zeilennummer dynamisch anpassen?
Antwort: Du kannst die Schleifenvariable b nutzen, um die Zeilennummer dynamisch zu erhöhen, indem du sie in der Cells-Funktion anpasst, z.B. ActiveSheet.Cells(1, 14 + b).End(xlUp).Row.

2. Frage
Was ist der Unterschied zwischen End(xlUp) und End(xlDown)?
Antwort: End(xlUp) sucht von der angegebenen Zelle nach oben, während End(xlDown) von der angegebenen Zelle nach unten sucht, um die letzte befüllte Zelle zu finden.

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