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

Forumthread: Range ermitteln

Range ermitteln
braleta
Hallo Excel-ianer,
kann ich eine Range in VBA rechnerisch ermitteln, wenn ich die erste Zelle kenne und dann nur noch Zahlen habe?
Was ich machen möchte:
ich möchte dynamisch per VBA einen Rahmen um Zellbereiche legen, von dem ich aber nur die Ecke oben links kenne und die Anzahl Zeilen und Spalten, die ich gerechnet habe.
Beispiel:
Ecke oben links ist "D5"
Zellen wagrecht = 28
Zellen senkrecht = 42
Wie ermittle ich die Ecke unten rechts?
Danke für eine Antwort
...braleta
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Range("D5").Resize(42,28) (owT)
10.09.2011 09:41:39
Erich
(owT):="ohne weiteren Text"
AW: Range ermitteln
10.09.2011 09:41:52
Josef

Hallo braleta,
da gibt es mehrere Möglichkeiten.
Am einfachsten.

Range("D5").Resize(42, 28)


« Gruß Sepp »

Anzeige
AW: Range ermitteln
10.09.2011 09:52:02
Matthias
Hallo
Vielleicht so ?

Sub berechne()
Dim Mycol, Myrow
Mycol = Range("D5").Column + 28
Myrow = Range("D5").Row + 42
MsgBox Cells(Myrow, Mycol).Address
Range("D5:" & Cells(Myrow, Mycol).Address).Select
End Sub
Gruß Matthias
Berichtigung
11.09.2011 10:12:50
Erich
Hi Matthias,
mit diesem Beitrag möchte ich verhindern helfen, dass später jemand meint,
deinen Code ("aus dem Herber-Archiv!") so verwenden zu können/sollen.
Er stimmt nämlich nicht. Und er ist umständlich. Und er ist unschön.
Er stimmt nicht, weil eine Zeile und eine Spalte zu viel ausgewählt werden. Das wird in "berechne1()" deutlich.
Er ist umständlich - die Lösung mit Resize ist einfach entscheidend besser.
Er ist unschön: Bei der Deklaration von Mycol, Myrow sollte man auf die Typangabe nicht verzichten.
Antworten hier im Forum werden leicht als vorbildhaft angesehen...
Und um nicht nur zu meckern, noch ein wenig Code:

Option Explicit
Sub berechne1()
Dim Mycol, Myrow
Mycol = Range("D5").Column + 28
Myrow = Range("D5").Row + 42
MsgBox Cells(Myrow, Mycol).Address
Range("D5:" & Cells(Myrow, Mycol).Address).Select
With Selection
MsgBox "Zeilen: " & .Rows.Count & " / Spalten: " & .Columns.Count & _
vbLf & "(Der Bereich sollte 42 Zellen hoch und 28 breit sein.)"
End With
End Sub
Sub berechne2()
Dim lngCol As Long, lngRow As Long
lngCol = Range("D5").Column - 1 + 28
lngRow = Range("D5").Row - 1 + 42
MsgBox Cells(lngRow, lngCol).Address
With Range(Cells(5, 4), Cells(lngRow, lngCol))
MsgBox "Zeilen: " & .Rows.Count & " / Spalten: " & .Columns.Count
End With
End Sub
Sub berechne3()
With Cells(5, 4).Resize(42, 28)
MsgBox "Zeilen: " & .Rows.Count & " / Spalten: " & .Columns.Count
End With
' und wenn nur die Zelle rechts unten gebraucht wird:
With Cells(5, 4).Offset(41, 27)
MsgBox "Rechts unten:" & vbLf & vbLf & _
"Zelle " & .Address & "  in Zeile " & .Row & " / Spalte " & .Column
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
P.S.: Nix für ungut - und noch eine schönen Sonntag!
Anzeige
@Erich
11.09.2011 10:37:20
Matthias
Hallo Erich
Im Grunde hast Du ja Recht. Resize ist einfacher und von mir aus auch schöner
Ich habs aber anders interpretiert als Du. Das ist der ganze Grund.
Sieh Dir dazu bitte meine Datei an.
Dann verstehst Du sofort wie ich die Frage verstanden habe
https://www.herber.de/bbs/user/76558.xls
Auch Dir einen schönen Sonntag
Gruß Matthias
Anzeige
AW: Range ermitteln
10.09.2011 14:07:48
braleta
Matthias, Josef, Erich,
ihr habt mir sehr geholfen, diesen Befehl kannte ich nicht, aber er ist toll und macht genau das, was ich brauche!
Herzlichen Dank ...bruno
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Range in Excel berechnen: Dynamische Bereiche mit VBA


Schritt-für-Schritt-Anleitung

Um eine Range in Excel VBA zu ermitteln, wenn du die obere linke Ecke und die Anzahl der Zeilen und Spalten kennst, kannst du die Resize-Funktion verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den Visual Basic for Applications (VBA) Editor in Excel (Alt + F11).

  2. Füge ein neues Modul hinzu (Rechtsklick auf „VBAProject“ > Einfügen > Modul).

  3. Kopiere den folgenden Code in das Modul:

    Sub BereichErmitteln()
       Dim obereLinkeEcke As Range
       Set obereLinkeEcke = Range("D5") ' Hier die obere linke Ecke angeben
    
       Dim zeilen As Long
       Dim spalten As Long
       zeilen = 42 ' Anzahl der Zeilen
       spalten = 28 ' Anzahl der Spalten
    
       ' Range erstellen
       Dim bereich As Range
       Set bereich = obereLinkeEcke.Resize(zeilen, spalten)
    
       ' Range auswählen
       bereich.Select
    End Sub
  4. Schließe den VBA-Editor und führe das Makro aus, um die Range zu ermitteln.


Häufige Fehler und Lösungen

  • Fehler: "Typ nicht definiert."

    • Ursache: Du hast möglicherweise die Typen von Variablen nicht deklariert. Stelle sicher, dass du Option Explicit am Anfang deines Moduls hinzufügst.
  • Fehler: "Überlauf."

    • Ursache: Wenn du mehr Zeilen oder Spalten als tatsächlich vorhanden angibst, tritt dieser Fehler auf. Überprüfe die Werte für zeilen und spalten.
  • Lösung: Verwende die Resize-Methode, um sicherzustellen, dass die Range korrekt ermittelt wird.


Alternative Methoden

Neben der Resize-Methode gibt es mehrere Möglichkeiten, eine Range in Excel zu berechnen:

  1. Offset-Methode:

    Sub BereichMitOffset()
       Dim obereLinkeEcke As Range
       Set obereLinkeEcke = Range("D5")
    
       Dim untereRechteEcke As Range
       Set untereRechteEcke = obereLinkeEcke.Offset(41, 27) ' 41 Zeilen und 27 Spalten verschieben
    
       ' Range auswählen
       Range(obereLinkeEcke, untereRechteEcke).Select
    End Sub
  2. Direkte Adressierung: Wenn du die Adresse der unteren rechten Ecke direkt berechnen möchtest, kannst du dies mit der Cells-Methode tun:

    Sub BerechneUndAuswählen()
       Dim col As Long, row As Long
       col = Range("D5").Column + 28 - 1
       row = Range("D5").Row + 42 - 1
    
       Range("D5:" & Cells(row, col).Address).Select
    End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung von Excel VBA, um eine Range zu ermitteln:

  • Beispiel 1: Ein Rahmen um einen Bereich zeichnen:

    Sub RahmenZeichnen()
       Dim bereich As Range
       Set bereich = Range("D5").Resize(42, 28)
    
       With bereich.Borders
           .LineStyle = xlContinuous
           .Weight = xlMedium
           .ColorIndex = 0
       End With
    End Sub
  • Beispiel 2: Werte in den ermittelten Bereich einfügen:

    Sub WerteEinfügen()
       Dim bereich As Range
       Set bereich = Range("D5").Resize(42, 28)
    
       bereich.Value = "Testwert"
    End Sub

Tipps für Profis

  • Verwende Option Explicit, um sicherzustellen, dass alle Variablen deklariert sind und Fehler vermieden werden.
  • Dokumentiere deinen Code, insbesondere wenn du komplexe Berechnungen durchführst.
  • Nutze die Debug.Print-Anweisung, um Werte während der Ausführung des Codes zu überprüfen.
  • Experimentiere mit der With-Anweisung, um den Code übersichtlicher zu gestalten.

FAQ: Häufige Fragen

1. Wie kann ich eine Range ermitteln, wenn ich nur die Anzahl der Zeilen und Spalten kenne? Du kannst die Resize-Methode verwenden, um die Größe des Bereichs zu ändern, basierend auf einer bekannten Zelle.

2. Welche Excel-Version benötige ich für die Verwendung von VBA? VBA ist in den meisten modernen Excel-Versionen verfügbar, einschließlich Excel 2010, 2013, 2016, 2019 und Microsoft 365.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige