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

Forumthread: Range dynamisch festlegen

Range dynamisch festlegen
02.11.2013 18:30:31
lupo
Hallo Forum.
Ich habe wieder mal eine neue Herausforderung und komme nicht weiter.
Ich habe eine Tabelle, die sich in der Zeilen und auch Spalten Zahl dynamisch ändern kann.
Nun möchte ich den Range ermitteln, damit ich ihn formatieren kann.
Folgendes habe ich schon:
Sub Rahmen_formatieren()
Dim Rahmen As Range
' Bereich festlegen
Set Rahmen =  ' Hier soll der Range dynamisch ermittelt werden
' Rahmen anwählen
Rahmen.Select
' Rahmen formatieren:
Selection.Borders(xlEdgeLeft).LineStyle = xlContinuous         ' Links
Selection.Borders(xlEdgeTop).LineStyle = xlContinuous          ' Oben
Selection.Borders(xlEdgeBottom).LineStyle = xlContinuous       ' Unten
Selection.Borders(xlEdgeRight).LineStyle = xlContinuous        ' Rechts
Selection.Borders(xlInsideVertical).LineStyle = xlContinuous   ' Innen senkrecht
Selection.Borders(xlInsideHorizontal).LineStyle = xlContinuous ' Innen waagerecht
Range("A1").Select
End Sub
Kann mir dann bitte jemand weiterhelfen?
DANKE,
mfg
lupo

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range dynamisch festlegen
02.11.2013 18:54:50
lupo
Hallo Hajo.
Danke für die schnelle Antwort.
Leider funktioniert "Sheets(1).UsedRange" nicht.
Evtl. liegt es dran, dass nicht alle Zellen genutzt werden.
Die Erste Spalte, die Text enthält ist A5 und die erste Zeile ist I5.
Der Bereich A1 bis H4 ist mehr oder weniger leer.
Gibt es noch eine andere Möglichkeit?
mfg lupo

Anzeige
AW: Range dynamisch festlegen
02.11.2013 19:11:44
Hajo_Zi
ich sehe den Code nicht. Bei mir geht es.
Sub n()
With Sheets(1).UsedRange
.Value = 1
End With
End Sub
Gruß Hajo

AW: Range dynamisch festlegen
02.11.2013 19:25:33
lupo
Ich habe mal ein Beispiel der Tabelle hoch geladen:
https://www.herber.de/bbs/user/87908.xls
Vielleicht wird dann meine Herausforderung klarer.
Die Anzahl der Projekte (Zeilen) ist dynamisch und wird automatisch aus einem anderen Programm übernommen.
Genauso ergeben sich die Kalenderwochen (Spalten) aus der Abfrage aus dem anderen Programm.
Daher sind die Zeilen und Spalten dynamisch und ich kann den Range nicht vorher ermitteln.
mfg lupo

Anzeige
Du solltest besser lesen und umsetzen ...
02.11.2013 19:34:00
Matthias
Hallo
Hajos Antwort war genau das was Du suchst:
Sub Rahmen_formatieren()
Dim Rahmen As Range
' Bereich festlegen
Set Rahmen = ActiveSheet.UsedRange ' Hier soll der Range dynamisch ermittelt  _
werden
With Rahmen
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeLeft).LineStyle = xlContinuous         ' Links
.Borders(xlEdgeTop).LineStyle = xlContinuous          ' Oben
.Borders(xlEdgeBottom).LineStyle = xlContinuous       ' Unten
.Borders(xlEdgeRight).LineStyle = xlContinuous        ' Rechts
.Borders(xlInsideVertical).LineStyle = xlContinuous   ' Innen senkrecht
.Borders(xlInsideHorizontal).LineStyle = xlContinuous ' Innen waagerecht
End With
Set Rahmen = Nothing
End Sub
Gruß Matthias

Anzeige
AW: Range dynamisch festlegen
02.11.2013 19:46:13
lupo
Hallo zusammen.
Danke für die Unterstützung.
Warum der Ansatz von Hajo nicht geklappt hat oder ich es nicht geblickt habe weiss ich nicht.
Jetzt scheint es zu funktionieren.
mfg lupo

AW: Range dynamisch festlegen
02.11.2013 18:36:45
Daniel
Hi
wenn die Zellen lückenlos zusammenhängen, am einfachsten so:
set Rahmen = Range("A1").Currentregion
kleiner Tip noch, lass das Selection weg und bearbeite die Zellen direkt, ohne sie zu selektieren:
Rahmen.Borders(xlEdgeLeft).LineStyle = xlContinuous
warum und wieso steht hier:
http://www.online-excel.de/excel/singsel_vba.php?f=78
Gruß Daniel

Anzeige
AW: Du verwechselst die Beiträge von Hajo & lupo
02.11.2013 19:02:43
Hajo
Ja, irgendwie bin ich verwirrt.
Der Makrorekorder hilft mir tatsächlich nicht weiter, auch wenn ich ihn als Basis genutzt habe.
Ich möchte den Bereich von A1 bis zum Schnittpunkt der letzten Zeile und Spalte mit Inhalt ermitteln.
Wobei der Bereich A1 bis H4 mehr oder weniger leer ist und daher zur Rangeermittlung nicht taugt.
Gibt es da eine andere Möglichkeit?
mfg torsten

Anzeige
Du solltest gezielter Fragen ...
02.11.2013 19:25:23
Matthias
Hallo
Zitat:

Wobei der Bereich A1 bis H4 mehr oder weniger leer ist und daher zur Rangeermittlung nicht taugt.
Die Aussage ist aber falsch
Du kannst wie von Hajo vorgeschlagen UsedRange benutzen oder Daniels Vorschlag mit CurrentRegion.
Und so kannst Du es Tetsen

Sub tt1()
MsgBox Sheets(1).UsedRange.Address
End Sub
Sub tt2()
MsgBox Sheets(1).Range("A1").CurrentRegion.Address
End Sub
Wobei beide Varianten durchaus unterschiedliche Adressen wiedergeben,
wenn z,B. die Zeile 4 im Bereich bereits einmal genutzt wurde und dann deren Inhalt wieder gelöscht wurde.
Gruß Matthias
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Dynamische Bereiche in Excel VBA festlegen


Schritt-für-Schritt-Anleitung

Um einen dynamischen Range in Excel VBA festzulegen, kannst du die folgenden Schritte befolgen:

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

  2. Erstelle ein neues Modul: Klicke auf Einfügen > Modul.

  3. Füge den folgenden Code ein:

    Sub Rahmen_formatieren()
       Dim Rahmen As Range
       ' Bereich dynamisch festlegen
       Set Rahmen = ActiveSheet.UsedRange ' Hier wird der Range dynamisch ermittelt
       With Rahmen
           .Borders(xlEdgeLeft).LineStyle = xlContinuous
           .Borders(xlEdgeTop).LineStyle = xlContinuous
           .Borders(xlEdgeBottom).LineStyle = xlContinuous
           .Borders(xlEdgeRight).LineStyle = xlContinuous
           .Borders(xlInsideVertical).LineStyle = xlContinuous
           .Borders(xlInsideHorizontal).LineStyle = xlContinuous
       End With
       Set Rahmen = Nothing
    End Sub
  4. Führe das Makro aus: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle dein Makro aus und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Fehler: "Run-time error 1004"

    • Lösung: Stelle sicher, dass du den richtigen Bereich definiert hast. Wenn dein Bereich leer ist, wird UsedRange möglicherweise nicht wie erwartet arbeiten.
  • Fehler: Der Range wird nicht richtig ermittelt

    • Lösung: Wenn UsedRange nicht funktioniert, versuche Range("A1").CurrentRegion. Dies ermittelt den Bereich basierend auf zusammenhängenden Zellen.

Alternative Methoden

  • Verwendung von CurrentRegion:

    Set Rahmen = Range("A1").CurrentRegion

    Diese Methode ist nützlich, wenn die Zellen lückenlos zusammenhängen und du den Bereich basierend auf der ersten Zelle bestimmen möchtest.

  • Verwendung von WorksheetFunction.CountA:

    Dim lastRow As Long
    Dim lastCol As Long
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
    Set Rahmen = Range(Cells(1, 1), Cells(lastRow, lastCol))

    Diese Methode ermittelt die letzte verwendete Zeile und Spalte und definiert den Range dynamisch.


Praktische Beispiele

  1. Beispiel mit UsedRange:

    Sub Beispiel1()
       Dim Rahmen As Range
       Set Rahmen = ActiveSheet.UsedRange
       Rahmen.Interior.Color = RGB(200, 200, 255) ' Hintergrundfarbe ändern
    End Sub
  2. Beispiel mit CurrentRegion:

    Sub Beispiel2()
       Dim Rahmen As Range
       Set Rahmen = Range("A1").CurrentRegion
       Rahmen.Font.Bold = True ' Schrift fett formatieren
    End Sub

Tipps für Profis

  • Vermeide die Verwendung von Select oder Activate: Diese Befehle sind in der Regel nicht notwendig und können deinen Code verlangsamen.
  • Teste deine Ranges mit MsgBox: Verwende MsgBox Rahmen.Address, um zu überprüfen, ob der Range korrekt ermittelt wurde.
  • Nutze Error Handling: Implementiere Fehlerbehandlung, um Probleme während der Ausführung deines Codes zu identifizieren.

FAQ: Häufige Fragen

1. Frage
Wie kann ich sicherstellen, dass der Range immer aktuell ist?
Antwort: Verwende UsedRange oder CurrentRegion innerhalb eines Makros, das regelmäßig ausgeführt wird, um sicherzustellen, dass der Range dynamisch bleibt.

2. Frage
Was ist der Unterschied zwischen UsedRange und CurrentRegion?
Antwort: UsedRange umfasst alle verwendeten Zellen im Arbeitsblatt, während CurrentRegion nur die zusammenhängenden Zellen um eine spezifische Zelle herum umfasst.

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