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

VBA: größe eines Bereichs ermitteln

Forumthread: VBA: größe eines Bereichs ermitteln

VBA: größe eines Bereichs ermitteln
12.06.2009 10:35:16
André
Moin zusammen,
ich habe mal wieder eine Anfängerfrage bezüglich VBA.
Eine Tabelle beeinhaltet Datensätze. Dabei ist weder die Anzahl der Datensätze festgelegt, noch die Anzahl der Felder (Spalten) pro Datensatz. Ich weiß vorab, daß die Datentabelle immer in Zelle A5 beginnt, daß in der ersten Spalte (A) keine Lücken sind und daß in der Überschriftenzeile (5) ebenfalls keine Leerfelder vorkommen.
Wie kann ich möglichst einfach ermitteln, welchen Bereich (z.B. $A$5:$Q$512) die Datensätze einnehmen?
Danke für eure Hilfe.
Gruß, André
Anzeige

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

Betreff
Datum
Anwender
Anzeige
mit UsedRange.Address
12.06.2009 10:46:01
Matthias
Hallo
MsgBox UsedRange.Address
Gruß Matthias
AW: mit UsedRange.Address
12.06.2009 10:55:14
André
Hallo Matthias,
das hilft mir leider nur zur Hälfte weiter. In meiner Tabelle ergibt UsedRange z.B. $A$1:$Q$512. Ich brauche aber den Bezug $A$5:$Q$512.
Das heißt, ich kenne ja die obere Linke Ecke meines Datenbereichs (nicht gleich der oberen linken Ecke des Tabellenblatts), brauche aber die untere rechte.
Gruß, André
Anzeige
AW: mit UsedRange.Address
12.06.2009 11:11:01
Luschi
Hallo André,
versuch es mal so:
Dim rg As Range, n As Long
'benutzten Bereich ermitteln
Set rg = ActiveSheet.UsedRange
'Anzahl der Zeilen im Bereich
n = rg.Rows.Count
'Bereich um 3 Zeilen nach unten schieben und um 3 Zeilen kürzen
Set rg = rg.Offset(3, 0).Resize(n - 3)
Set rg = Nothing
Gruß von Luschi
aus klein-Paris
Anzeige
AW: mit UsedRange.Address
12.06.2009 12:19:56
André
Hallo Luschi,
danke, so funktioniert das wunderbar.
Gruß, André
brauche aber die untere rechte.
12.06.2009 11:46:14
Matthias
Hallo
Na dann vielleicht so.
Userbild
Nicht gerade profihaft, aber wenn keine weiteren Daten drin sind könnte es klappen
Nee, vergiss es.
machs einfach so:

MsgBox Cells(ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row, ActiveSheet.UsedRange. _
SpecialCells(xlCellTypeLastCell).Column).Address


Gruß Matthias

Anzeige
Zusammenhängenden Bereich ermitteln
12.06.2009 11:29:22
Erich
Hi André
mit UsedRange würde ich an der Stelle nicht arbeiten, insbesondere nicht voraussetzen,
dass UsedRange bei A1 beginnt.
Probier mal

Sub test()
Dim rng As Range, lngZ As Long, lngS As Long
With Cells(5, 1)
If IsEmpty(.Offset(1)) Then lngZ = .Row Else lngZ = .End(xlDown).Row
If IsEmpty(.Offset(, 1)) Then lngS = .Column Else lngS = .End(xlToRight).Column
Set rng = Range(.Cells, Cells(lngZ, lngS))
End With
MsgBox rng.Address
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Zusammenhängenden Bereich ermitteln
12.06.2009 11:57:39
Gerd
Hi @all !
Das sehe ich wie Erich. Bliebe noch abzuklären, ob André die Überschriftenzeile (5) in der auszugebenden Bereichsaddresse mit drinn haben will, falls nein, was zurückgegeben werden soll, wenn A6 dann leer ist.
Grüße Gerd
AW: Zusammenhängenden Bereich ermitteln
12.06.2009 12:03:28
Matthias
Hi
Zitat:
Ich weiß vorab, daß die Datentabelle immer in Zelle A5 beginnt, daß in der ersten Spalte (A) keine Lücken sind
;o)
Gruß Matthias
Anzeige
AW: Auch Zitat
12.06.2009 12:15:08
Gerd
Hi Matthias!
und daß in der Überschriftenzeile (5)
Es hängt doch davon ab, für welchen Zweck der ermittelte Bereich verwendet werden soll,
ob die Überschriftenzeile einbezogen werden muss.
Gruß Gerd
AW: Zusammenhängenden Bereich ermitteln
12.06.2009 12:20:53
André
Moin Erich,
danke. Ich habe allerdings den Vorschlag von Luschi genommen, der auch wunderbar funktioniert.
Gruß, André
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Größe eines Bereichs in Excel VBA ermitteln


Schritt-für-Schritt-Anleitung

Um die Größe eines Bereichs in Excel VBA zu ermitteln, der in einer bestimmten Zelle beginnt und keine Lücken in der ersten Spalte hat, kannst Du die folgenden Schritte ausführen:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle "Einfügen" > "Modul".
  3. Füge den folgenden Code ein:

    Sub GetDataRange()
       Dim rng As Range
       Dim lastRow As Long
       Dim lastColumn As Long
    
       ' Bestimme die letzte Zeile und Spalte
       lastRow = Cells(Rows.Count, 1).End(xlUp).Row
       lastColumn = Cells(5, Columns.Count).End(xlToLeft).Column
    
       ' Setze den Bereich
       Set rng = Range(Cells(5, 1), Cells(lastRow, lastColumn))
    
       ' Ausgabe der Adresse des Bereichs
       MsgBox "Der Bereich ist: " & rng.Address
    End Sub
  4. Führe das Makro aus:

    • Klicke auf F5, um das Makro auszuführen. Es zeigt die Adresse des ermittelten Bereichs an, z.B. $A$5:$Q$512.

Häufige Fehler und Lösungen

  • Fehler: Runtime Error 1004

    • Lösung: Überprüfe, ob Du in der richtigen Tabelle arbeitest. Stelle sicher, dass die Tabelle nicht geschützt ist.
  • Fehler: Falscher Bereich wird angezeigt

    • Lösung: Stelle sicher, dass die Daten in der ersten Spalte (A) keine Lücken haben und dass die Überschriften in der Zeile 5 stehen.

Alternative Methoden

Falls die UsedRange-Methode nicht die gewünschten Ergebnisse liefert, kannst Du auch den folgenden Ansatz verwenden:

Sub AlternativeGetDataRange()
    Dim rng As Range
    Dim lastRow As Long
    Dim lastColumn As Long

    With Cells(5, 1)
        lastRow = .End(xlDown).Row
        lastColumn = .End(xlToRight).Column
        Set rng = Range(.Cells, Cells(lastRow, lastColumn))
    End With

    MsgBox "Der Bereich ist: " & rng.Address
End Sub

Diese Methode verwendet End(xlDown) und End(xlToRight), um den letzten ausgefüllten Zellbereich zu bestimmen.


Praktische Beispiele

  1. Beispiel mit MsgBox:

    MsgBox "Der Datenbereich ist: " & rng.Address
    • Dieses Beispiel zeigt den ermittelten Bereich in einem Dialogfeld an.
  2. Beispiel zur Weiterverarbeitung:

    Dim cell As Range
    For Each cell In rng
       ' Hier kannst Du weitere Operationen durchführen
       Debug.Print cell.Value
    Next cell

Tipps für Profis

  • Verwende UsedRange mit Bedacht: Der UsedRange kann manchmal mehr Zeilen und Spalten umfassen, als tatsächlich Daten enthalten. Überprüfe daher immer, ob die Angaben in der ersten Spalte und in der Überschrift stimmen.

  • Nutze Debugging-Tools: Verwende Debug.Print, um die Werte der Variablen während der Ausführung anzuzeigen und um sicherzustellen, dass alles wie erwartet funktioniert.


FAQ: Häufige Fragen

1. Wie kann ich den Bereich ohne die Überschriftenzeile ermitteln?

  • Du kannst den Startpunkt auf Cells(6, 1) anpassen, um die erste Zeile nach den Überschriften zu berücksichtigen.

2. Gibt es eine Möglichkeit, die Anzahl der Datensätze zu zählen?

  • Ja, nach der Ermittlung des Bereichs kannst Du die Anzahl der Zeilen mit rng.Rows.Count ermitteln.

3. Was ist, wenn meine Daten nicht in A5 beginnen?

  • Du kannst den Startpunkt im Code anpassen, indem Du die Zelle, in der Deine Daten beginnen, änderst.

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