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

Forumthread: UsedRange, jedoch beginnend ab A1 markieren

UsedRange, jedoch beginnend ab A1 markieren
Peter
Guten Tag
Ich möchte untenstehende Codezeilen erweitern, dass der selektierte Bereich immer aber A1 beginnt, auch wenn in Spalte A resp. Zeile 1 kein Eintrag sein sollte.
Beispiel: UsedRange = C13:CA39
Gewünschte Selektion = A1:CA39
Wie muss der Code angepasst werden?
Danke für eine Antwort.
Gruss, Peter
Sub Kopierbereich()
ActiveSheet.UsedRange.Select
End Sub

Anzeige
Suche nach letzter benutzter Zelle,...
21.09.2010 11:07:19
Luc:-?
…hier schon oft beschrieben, Peter,
oder…

With ActiveSheet.UsedRange
Range(Cells(1, 1), .Cells(.Rows.Count + .Rows(1).Row - 1, _
.Columns.Count + .Columns(1).Column - 1).Select
End With
Gruß Luc :-?
AW: Suche nach letzter benutzter Zelle,...
21.09.2010 12:10:19
Peter
Hallo Luc
Danke für deine Antwort. Irgendwie hat es nicht geklappt; aufgrund der Gedankenanstösse habe ich mir jetzt wie folgt beholfen:
Sub Kopierbereich()
Dim LastRow As Long, LastColumn As Long
On Error GoTo Fehler
LastRow = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious) _
.Row
LastColumn = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:= _
xlPrevious).Column
Range(Cells(1, 1), Cells(LastRow, LastColumn)).Select
GoTo Ende
Fehler:
[A1].Select
Application.StatusBar = "Ausgewählte Tabelle ist leer"
Sleep 1000
Application.StatusBar = ""
Ende:
End Sub
Gruss, Peter
Anzeige
Falsch...
21.09.2010 12:25:29
JogyB
Hallo Luc,
entweder Cells statt .Cells oder einfach
With ActiveSheet.UsedRange
Range(Cells(1, 1), .Cells(.Rows.Count, .Columns.Count)).Select
End With

Gruß, Jogy
AW: Falsch...
21.09.2010 12:39:38
Peter
Hallo Jogy
Vielen Dank.
In meinem Tabelle habe ich beim Testen einen zu grossen Bereich erhalten (nicht jedoch mit dem anderen Code, den ich in der Zwischenzeit gepostet habe). Ich habe dann via Control+G, Inhalte ..., Letzte Zelle feststellen können, dass am Ende des erweiterten Bereiches doch die letzte Zelle "vermerkt" ist.
Dies hat mich erstaunt, habe ich doch vorgängig UsedRange in dieser Tabelle gelöscht mit
objWorksheet.UsedRange.Clear
Was bewirkt denn, dass UsedRange unverändert bleibt, obwohl alles gelöscht wurde?
Gruss, Peter
Anzeige
AW: Falsch...
21.09.2010 12:44:11
Hajo_Zi
Hallo Peter,
der benutzte Bereich wird nur durch sichern angepast.

AW: Falsch...
21.09.2010 13:01:28
Peter
Hallo Hajo
Es muss noch irgendwelche andere Gesetzmässigkeiten geben; auch nach dem Speichern sehe ich lauter leere Zellen und Excel zeigt mir die letzte Zelle irgendwo in der Tabelle, wo weit und Breit keine Einträge vorhanden sind.
Gruss, Peter
Anzeige
AW: benutzter Bereich
21.09.2010 13:06:20
Hajo_Zi
Hallo Peter,
nur wenige sehen Deine Datei. Löschemal Alles von der letzten belegten Zeilen bis zum Punkt Strg+End. Zeilen und Spalten getrennt und speichere dann. Dann stimmt streg+Ende auch mit dem Ende der Tabelle überein.

Anzeige
AW: benutzter Bereich
21.09.2010 13:07:45
Hajo_Zi
Hallo Peter,
vergessen + eine Zeile bzw Spalte von Strg+Ende.

Du musst die Zeilen oder Spalten physisch...
21.09.2010 20:05:22
Luc:-?
…löschen, Peter,
nicht nur den Inhalt. Speichern danach kann auch nicht schaden…
Gruß Luc :-?
AW: Du musst die Zeilen oder Spalten physisch...
21.09.2010 20:54:07
Peter
Hallo Luc
Dann bin ich doch etwas leicht enttäuscht von UsedRange und lebe mit der Ersatzlösung, bei der ich keine Zeilen "physisch" löschen muss:
Sub Kopierbereich()
Dim LastRow As Long, LastColumn As Long
On Error GoTo Fehler
LastRow = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious) _
_
.Row
LastColumn = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:= _
xlPrevious).Column
Range(Cells(1, 1), Cells(LastRow, LastColumn)).Select
GoTo Ende
Fehler:
[A1].Select
Application.StatusBar = "Ausgewählte Tabelle ist leer"
Sleep 1000
Application.StatusBar = ""
Ende:
End Sub
Vielen Dank für die Unterstützung!
Gruss, Peter
Anzeige
Bitte sehr! Gern geschehen! ;-) owT
22.09.2010 18:23:02
Luc:-?
:-?
Der Pkt vor 2.Cells hat sich eingeschlichen! owT
21.09.2010 20:02:37
Luc:-?
:-?
;
Anzeige
Anzeige

Infobox / Tutorial

A1 als Startpunkt für den benutzten Bereich in Excel festlegen


Schritt-für-Schritt-Anleitung

Um den benutzten Bereich in einem Excel-Arbeitsblatt so zu markieren, dass die Selektion immer ab A1 beginnt, kannst du den folgenden VBA-Code verwenden. Dieser Code ermittelt die letzte benutzte Zeile und die letzte benutzte Spalte und wählt dann den Bereich von A1 bis zur letzten benutzten Zelle aus:

Sub Kopierbereich()
    Dim LastRow As Long, LastColumn As Long
    On Error GoTo Fehler
    LastRow = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    LastColumn = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    Range(Cells(1, 1), Cells(LastRow, LastColumn)).Select
    GoTo Ende
Fehler:
    [A1].Select
    Application.StatusBar = "Ausgewählte Tabelle ist leer"
    Sleep 1000
    Application.StatusBar = ""
Ende:
End Sub

Dieser Code verwendet die .Find-Methode, um die letzte benutzte Zelle zu finden, und stellt sicher, dass die Auswahl immer bei A1 beginnt.


Häufige Fehler und Lösungen

  1. Der Code wählt nicht den richtigen Bereich aus.

    • Überprüfe, ob es versteckte Zellen oder Formate gibt, die den benutzten Bereich beeinflussen könnten. Manchmal kann das Löschen von Inhalten nicht ausreichen, um den benutzten Bereich zu aktualisieren.
  2. Fehlermeldung "Ausgewählte Tabelle ist leer".

    • Stelle sicher, dass in deinem Arbeitsblatt mindestens eine Zelle befüllt ist. Der Code wird nicht korrekt funktionieren, wenn es keine benutzten Zellen gibt.
  3. UsedRange ist größer als erwartet.

    • Prüfe, ob du tatsächlich die Zeilen oder Spalten physisch gelöscht hast. Nur den Inhalt zu löschen, reicht oft nicht aus, um die UsedRange zu aktualisieren.

Alternative Methoden

Wenn du eine andere Methode bevorzugst, um den benutzten Bereich in Excel auszuwählen, kannst du folgende Variante verwenden:

Sub KopierbereichAlternative()
    With ActiveSheet.UsedRange
        Range(Cells(1, 1), .Cells(.Rows.Count, .Columns.Count)).Select
    End With
End Sub

Diese Methode verwendet die ActiveSheet.UsedRange-Eigenschaft und ist besonders nützlich, wenn du auf die volle Breite deines benutzten Bereichs zugreifen möchtest, auch wenn Zeile 1 oder Spalte A leer sind.


Praktische Beispiele

Hier ist ein praktisches Beispiel, das zeigt, wie du den Code in einem realen Szenario implementieren kannst:

  1. Öffne ein neues oder bestehendes Excel-Dokument.
  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Füge einen neuen Modul hinzu (Einfügen > Modul).
  4. Kopiere den obigen VBA-Code in das Modul.
  5. Schließe den VBA-Editor und kehre zu Excel zurück.
  6. Führe das Makro aus (über Entwicklertools > Makros).

Wenn du das Makro ausführst, wird der benutzte Bereich ab A1 markiert, unabhängig davon, ob Zellen in Spalte A oder Zeile 1 leer sind.


Tipps für Profis

  • Verwende .UsedRange effizient: Achte darauf, dass du die .UsedRange-Eigenschaft nur dann verwendest, wenn du sicher bist, dass der benutzte Bereich aktuell ist. Es ist ratsam, das Arbeitsblatt nach größeren Datenänderungen zu speichern, um sicherzustellen, dass UsedRange korrekt aktualisiert wird.

  • Fehlerbehandlung: Implementiere immer eine Fehlerbehandlung, wie im obigen Beispiel, um sicherzustellen, dass dein Makro auch bei unerwarteten Situationen stabil bleibt.

  • Optimiere dein Makro: Wenn du häufig mit großen Datenmengen arbeitest, überlege dir, wie du dein Makro optimieren kannst, um die Ausführungszeit zu verkürzen.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen UsedRange und CurrentRegion?
UsedRange bezieht sich auf den Bereich, der tatsächlich Daten enthält, während CurrentRegion den zusammenhängenden Bereich von Zellen zurückgibt, die Daten enthalten.

2. Warum bleibt mein UsedRange unverändert, obwohl ich Zellen gelöscht habe?
Dies liegt daran, dass Excel manchmal die UsedRange-Eigenschaft nicht automatisch aktualisiert. Um sicherzustellen, dass sie korrekt ist, musst du möglicherweise die Zeilen oder Spalten physisch löschen und das Arbeitsblatt speichern.

3. Funktioniert dieser Code in allen Excel-Versionen?
Ja, der Code sollte in allen modernen Excel-Versionen funktionieren, die VBA unterstützen. Achte jedoch darauf, dass einige Funktionen in älteren Versionen eingeschränkt sein könnten.

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