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

Forumthread: Wie letzte Zeile von usedRange ermitteln?

Wie letzte Zeile von usedRange ermitteln?
26.02.2008 21:05:45
usedRange
Guten Abend
Mit nachfolgendem identifiziere ich eine Spalte mit speziellen Begriffen, bei denen Leerzeichen überflüssig sind und daher entfernt werden sollen. Um mit Ersetzen zu arbeiten, definiere ich einen Range, der abzusuchen ist.
Der Range ist wie folgt definiert:
Set rngSpalte = Range(Cells(1, i), Cells(1000, i))
Nun möchte ich die Zahl 1000 ersetzen mit der Zahl, die sich ergibt, wenn abgefragt wird, welches die letzte Zeile von used range ist.
Doch wie stelle ich das an?
Danke für eine Rückmeldung.
Peter
Option Explicit

Sub ttt()
Dim i As Integer
Dim lngSpalte As Long
Dim rng As Range
Dim rngSpalte As Range
'Feststellen, ob in Spalten A-Z (1-26) 'T.' oder 'C.' vorkommt, wenn ja, wird die betreffende  _
Spaltennummer
'in die Variable lngSpalte geschrieben
For i = 1 To 26
If WorksheetFunction.CountIf(Range(Cells(1, i), Cells(65536, i)), "*T.*") + _
WorksheetFunction.CountIf(Range(Cells(1, i), Cells(65536, i)), "*C.*") > 0 Then  _
lngSpalte = i
Set rngSpalte = Range(Cells(1, i), Cells(1000, i))
'wenn der Variable lngSpalte eine Zahl zugewiesen wurde, werden in dieser Spalte die  _
unnötigen
'Leerschläge entfernt; die obige Schlaufe muss nicht weitergeführt werden (deshalb  _
Exit Sub)
If lngSpalte  0 Then
For Each rng In rngSpalte
rng = Replace(rng, " ", "")
Next
Exit Sub
Else
End If
Next i
End Sub


Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wie letzte Zeile von usedRange ermitteln?
26.02.2008 21:17:00
usedRange
Hi,
du weißt, dass UsedRange ein recht unsicherer Kandidat ist?
ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
mfg Kurt

AW: Wie letzte Zeile von usedRange ermitteln?
26.02.2008 21:21:00
usedRange
Hallo Kurt
Vielen Dank.
Gäbe es hier "sicherere Kandidaten"?
Gruss, Peter

AW: Wie letzte Zeile von usedRange ermitteln?
26.02.2008 21:28:46
usedRange
HI
kommt darauf an.
wenn man sicher weiß daß eine bestimmte Spalte immer bis zur letzten Zeile beschrieben ist, könnte man auch das verwenden:

Set rngSpalte = Range(Cells(1, i), Cells(Cells(65536,xxx).end(xlup).row, i))


das ist recht sicher und lässt sich auch nicht durch einfügen oder Löschen von Zeilen durcheinanderbringen (was bei UsedRange manchmal passiert, insbesondere beim Löschen von Inhalten kann es sein, daß sie sich nicht anpasst und grösser ist, als der tatsächlich genutze bereich)
Du musst halt wissen, in welcher Spalte (hier xxx) du suchen musst.
Gruß, Daniel

Anzeige
AW: Wie letzte Zeile von usedRange ermitteln?
26.02.2008 21:21:00
usedRange
HI
das könnte so funktionieren:

Set rngSpalte = Range(Cells(1, i), Cells(activesheet.usedrange.rows.count, i))


oder so:


Set rngSpalte = Cells(1, i).resize(activesheet.usedrange.rows.count,1)


das funktioniert allerdings nur unter der Voraussetzung, das mindestens eine Zelle der Zeile 1 beschrieben ist.
ist dies nicht der Fall, beginnt auch die UsedRange erst später und UsedRange.Rows.Count liefert einen falschen Wert (nämlich die Anzahl der Zeilen und nicht die Zeilen-Nr der Letzten Zeile.)
das könnte man aber abfangen, indem man den Ausdruck so erweitert:


Activesheet.Usedrange.Rows.Count + Activesheet.Usedrange.Row - 1


Aber wie gesagt, wenn sichergestellt ist, daß die erste Zeile beschrieben ist, ist dieser zusatz nicht erforderlich.
Gruß, Daniel

Anzeige
AW: Wie letzte Zeile von usedRange ermitteln?
26.02.2008 21:47:00
usedRange
Hallo Daniel
Vielen Dank für die Erläuterungen
Peter

AW: Wie letzte Zeile von usedRange ermitteln?
26.02.2008 21:23:00
usedRange
Hallo Peter,
Sub Leerzeichen()
Dim i As Integer
Dim rng As Range

With Application
    For i = 1 To 26
        If .CountIf(Rows(i), "*T.*") + .CountIf(Rows(i), "*C.*") > 0 Then
            Set rng = Range(Cells(1, i), Cells(Cells(Rows.Count, i).End(xlUp).Row, i))
            Exit For
        End If
    Next
End With

If Not rng Is Nothing Then rng.Replace What:=" ", Replacement:="", LookAt:=xlPart

End Sub


Gruß Sepp



Anzeige
AW: Wie letzte Zeile von usedRange ermitteln?
26.02.2008 21:57:08
usedRange
Hallo Josef
Vielen Dank für deine Hilfe
Es scheint, dass irgendetwas noch nicht funktioniert. Ich habe eine Testdatei (mit deinem Makro drin) hochgeladen.
Könntest du mir nochmals helfen?
Danke, Peter
https://www.herber.de/bbs/user/50215.xls

Anzeige
AW: Wie letzte Zeile von usedRange ermitteln?
26.02.2008 22:06:00
usedRange
Hallo Peter,
mein Fehler, es mucc .Columns statt .Rows lauten.
Sub Leerzeichen()
Dim i As Integer
Dim rng As Range

With Application
    For i = 1 To 26
        If .CountIf(Columns(i), "*T.*") + .CountIf(Columns(i), "*C.*") > 0 Then
            Set rng = Range(Cells(1, i), Cells(Cells(Rows.Count, i).End(xlUp).Row, i))
            Exit For
        End If
    Next
End With

If Not rng Is Nothing Then rng.Replace What:=" ", Replacement:="", LookAt:=xlPart

End Sub


Gruß Sepp



Anzeige
AW: Wie letzte Zeile von usedRange ermitteln?
26.02.2008 22:09:54
usedRange
Hallo Sepp
Vielen, vielen Dank!
Peter
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Letzte Zeile von UsedRange in Excel VBA ermitteln


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Ein neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle Einfügen > Modul.

  3. Code einfügen: Füge den folgenden Code in das Modul ein, um die letzte Zeile des UsedRange zu ermitteln:

    Sub ErmitteleLetzteZeile()
        Dim letzteZeile As Long
        letzteZeile = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
        MsgBox "Die letzte Zeile im UsedRange ist: " & letzteZeile
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

  • Fehler: "Runtime Error 1004": Dies kann auftreten, wenn der UsedRange leer ist. Stelle sicher, dass in der ersten Zeile Daten vorhanden sind, bevor du das Makro ausführst.

  • Fehler: Falsche Zeilennummer: Wenn du die letzte Zeile nicht korrekt erhältst, überprüfe, ob du die richtige Tabelle aktiv hast und dass UsedRange korrekt definiert ist.


Alternative Methoden

  • Du kannst auch den folgenden Code verwenden, um die letzte Zeile zu ermitteln, ohne UsedRange zu nutzen:

    Dim letzteZeile As Long
    letzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
    MsgBox "Die letzte Zeile in Spalte A ist: " & letzteZeile
  • Diese Methode ist besonders nützlich, wenn du sicher bist, dass in einer bestimmten Spalte immer Daten vorhanden sind.


Praktische Beispiele

  1. Verwendung in einem Ersetzungs-Makro: Setze die letzte Zeile in deinem Ersetzungs-Makro ein:

    Dim rngSpalte As Range
    Set rngSpalte = Range(Cells(1, i), Cells(ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1, i))
  2. Dynamisches Arbeiten mit Variablen: Nutze den Wert der letzten Zeile in einer Schleife:

    Dim i As Long
    For i = 1 To letzteZeile
        ' Deine Logik hier
    Next i

Tipps für Profis

  • Verwende UsedRange mit Bedacht: UsedRange kann manchmal ungenau sein, insbesondere wenn Zeilen oder Spalten gelöscht werden. Überlege, ob du stattdessen eine bestimmte Spalte zur Bestimmung der letzten Zeile verwenden möchtest.

  • Fehlerbehandlung einbauen: Füge Fehlerbehandlungsroutinen in dein Makro ein, um unerwartete Probleme abzufangen.

    On Error Resume Next
    ' Dein Code hier
    On Error GoTo 0

FAQ: Häufige Fragen

1. Wie kann ich die letzte Zeile für mehrere Spalten gleichzeitig ermitteln?
Du kannst eine Schleife verwenden, um durch die Spalten zu iterieren und die letzte Zeile für jede Spalte zu ermitteln.

2. Was ist der Unterschied zwischen UsedRange und End(xlUp)?
UsedRange gibt den Bereich zurück, der Daten enthält, kann aber ungenau sein, während End(xlUp) die letzte gefüllte Zelle in einer bestimmten Spalte ermittelt.

3. Kann ich UsedRange in einer bestimmten Tabelle verwenden?
Ja, du kannst den UsedRange einer bestimmten Tabelle mit Worksheets("Tabellenname").UsedRange ansprechen.

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