Range-Objekt (Excel)

Stellt eine Zelle, eine Zeile, eine Spalte, eine Auswahl von Zellen aus einem oder mehreren zusammenhängenden Zellblöcken oder einen 3D-Bereich dar.

Hinweis

Haben Sie Interesse an der Entwicklung von Lösungen, mit denen die Funktionen von Office über mehrere Plattformen erweitert werden können? Schauen Sie sich das neue Office-Add-In-Modell an. Office-Add-Ins haben im Vergleich zu VSTO-Add-Ins und -Lösungen einen geringen Platzbedarf. Sie können sie mit fast jeder Web-Programmiertechnologie erstellen, z. B. HTML5, JavaScript, CSS3 und XML.

Bemerkungen

Das Standardelement von Range leitet Aufrufe ohne Parameter an die Value-Eigenschaft und Aufrufe mit Parametern an das Item-Element weiter. Somit gilt: someRange = someOtherRange entspricht someRange.Value = someOtherRange.Value, someRange(1) entspricht someRange.Item(1) und someRange(1,1) entspricht someRange.Item(1,1).

Im Beispiel abschnitt werden die folgenden Eigenschaften und Methoden zum Zurückgeben eines Range-Objekts beschrieben:

  • Range und Zellen-Eigenschaften des Arbeitsblatt-Objekts
  • Range und Zellen-Eigenschaften des Range-Objekts
  • Rows und Columns-Eigenschaften des Worksheet-Objekts
  • Rows und Columns-Eigenschaften des Range-Objekts
  • Offset-Eigenschaft des Range-Objekts
  • Union-Methode des Anwendungs-Objekts

Beispiel

Verwenden Sie Range (arg), wobei arg den Bereich benennt, um ein Range-Objekt zurückzugeben, das eine einzelne Zelle oder einen Zellbereich darstellt. Im folgende Beispiel wird der Wert der Zelle A1 in Zelle A5 platziert.

Worksheets("Sheet1").Range("A5").Value = _ 
    Worksheets("Sheet1").Range("A1").Value

Im folgenden Beispiel wird der Bereich A1:H8 mit Zufallszahlen aufgefüllt, indem die Formel für jede Zelle im Bereich angegeben wird. Bei Verwendung ohne Objektbezeichner (ein Objekt auf der linken Seite des Punkts), gibt die Range-Eigenschaft einen Bereich im aktiven Blatt zurück. Wenn das aktive Blatt kein Arbeitsblatt ist, schlägt die Methode fehl.

Verwenden Sie die Aktivieren-Methode des Arbeitsblatt-Objekts, um ein Arbeitsblatt zu aktivieren, bevor Sie die Range-Eigenschaft ohne expliziten Objektbezeichner verwenden.

Worksheets("Sheet1").Activate 
Range("A1:H8").Formula = "=Rand()"    'Range is on the active sheet

Im folgenden Beispiel wird der Inhalt des Bereichs Criteria gelöscht.

Hinweis

Wenn Sie als Bereichsadresse ein Textargument verwenden, müssen Sie die Adresse im A1-Bezugssystem angeben (die Z1S1-Schreibweise kann nicht verwendet werden).

Worksheets(1).Range("Criteria").ClearContents

Verwenden Sie Cells auf einem Arbeitsblatt, um einen Bereich abzurufen, der aus allen einzelnen Zellen auf dem Arbeitsblatt besteht. Sie können auf einzelne Zellen über Item(row, column) zugreifen, wobei row der Zeilenindex und column der Spaltenindex ist. Item kann weggelassen werden, da der Aufruf standardmäßig vom Standardelement von Range an das Element weitergeleitet wird. Im folgenden Beispiel wird auf dem ersten Blatt der aktiven Arbeitsmappe der Wert der Zelle A1 auf 24 und der Zelle B1 auf 42 festgelegt.

Worksheets(1).Cells(1, 1).Value = 24
Worksheets(1).Cells.Item(1, 2).Value = 42

Im folgenden Beispiel wird die Formel für Zelle A2 festgelegt.

ActiveSheet.Cells(2, 1).Formula = "=Sum(B1:B5)"

Außerdem können Sie auch Range("A1") verwenden, um die Zelle A1 zurückzugeben. Es kann vorkommen, dass das Verwenden der Zellen-Eigenschaft einfacher ist, da Sie eine Variable für die Zeile oder Spalte verwenden können. Im folgenden Beispiel werden auf Sheet1 Spalten- und Zeilenüberschriften erstellt. Beachten Sie, dass nach der Aktivierung des Arbeitsblatts die Zellen-Eigenschaft ohne explizite Blattangabe verwendet werden kann (es wird eine Zelle auf dem aktiven Arbeitsblatt zurückgegeben).

Hinweis

Obwohl Sie Visual Basic-Zeichenfolgenfunktionen zum Ändern von A1-Schreibweisenreferenzen verwenden könnten, ist es einfacher (und bessere Programmierpraxis), die Cells(1, 1)-Notation zu verwenden.

Sub SetUpTable() 
Worksheets("Sheet1").Activate 
For TheYear = 1 To 5 
    Cells(1, TheYear + 1).Value = 1990 + TheYear 
Next TheYear 
For TheQuarter = 1 To 4 
    Cells(TheQuarter + 1, 1).Value = "Q" & TheQuarter 
Next TheQuarter 
End Sub

Verwenden Sie expression_ Cells, wobei expression ein Ausdruck ist, der ein Range-Objekt zurückgibt, um einen Bereich mit derselben Adresse, bestehend aus einzelnen Zellen, abzurufen. In einem solchen Bereich greifen Sie auf einzelne Zellen über Item(row, column) zu, wobei die Angaben relativ zur oberen linken Ecke des ersten Bereichs des Range-Objekts erfolgen. Item kann weggelassen werden, da der Aufruf standardmäßig vom Standardelement von Range an das Element weitergeleitet wird. Im folgenden Beispiel wird die Formel für die Zellen C5 und D5 des ersten Blatts der aktiven Arbeitsmappe festgelegt.

Worksheets(1).Range("C5:C10").Cells(1, 1).Formula = "=Rand()"
Worksheets(1).Range("C5:C10").Cells.Item(1, 2).Formula = "=Rand()"

Verwenden Sie Range (cell1, cell2), wobei cell1 und cell2 9 Range-Objekte sind, die die Anfangs- und Endzelle festlegen, um ein Range-Objekt zurückzugeben. Im folgenden Beispiel wird der Randlinienstil für die Zellen A1:J10 festgelegt.

Hinweis

Beachten Sie, dass der Punkt vor jedem Auftreten der Cells-Eigenschaft erforderlich ist, wenn das Ergebnis der vorhergehenden With-Anweisung auf die Cells-Eigenschaft angewendet werden soll. In diesem Fall gibt er an, dass sich die Zellen auf dem Arbeitsblatt Eins befinden (ohne den Punkt würde die Cells-Eigenschaft Zellen auf dem aktiven Blatt zurückgeben).

With Worksheets(1) 
    .Range(.Cells(1, 1), _ 
        .Cells(10, 10)).Borders.LineStyle = xlThick 
End With

Verwenden Sie Rows auf einem Arbeitsblatt, um einen Bereich abzurufen, der aus allen Zeilen auf dem Arbeitsblatt besteht. Sie können über Item(row) auf einzelne Zeilen zugreifen, wobei row der Zeilenindex ist. Item kann weggelassen werden, da der Aufruf standardmäßig vom Standardelement von Range an das Element weitergeleitet wird.

Hinweis

Es ist nicht zulässig, den zweiten Parameter von Item für Bereiche, die aus Zeilen bestehen, anzugeben. Sie müssen sie zuerst über Cells in einzelne Zellen umwandeln.

Im folgenden Beispiel werden Zeile 4 und 10 des ersten Blatts der aktiven Arbeitsmappe gelöscht.

Worksheets(1).Rows(10).Delete
Worksheets(1).Rows.Item(5).Delete

Verwenden Sie Columns auf einem Arbeitsblatt, um einen Bereich abzurufen, der aus allen Spalten auf dem Arbeitsblatt besteht. Sie können über Item(row) [sic] auf einzelne Spalten zugreifen, wobei row der Spaltenindex ist, der als Zahl oder als Spaltenadresse im A1-Format angegeben wird. Item kann weggelassen werden, da der Aufruf standardmäßig vom Standardelement von Range an das Element weitergeleitet wird.

Hinweis

Es ist nicht zulässig, den zweiten Parameter von Item für Bereiche, die aus Spalten bestehen, anzugeben. Sie müssen sie zuerst über Cells in einzelne Zellen umwandeln.

Im folgenden Beispiel werden die Spalten "B", "C", "E" und "J" des ersten Blatts der aktiven Arbeitsmappe gelöscht.

Worksheets(1).Columns(10).Delete
Worksheets(1).Columns.Item(5).Delete
Worksheets(1).Columns("C").Delete
Worksheets(1).Columns.Item("B").Delete

Verwenden Sie expression_ Rows, wobei expression ein Ausdruck ist, der ein Range-Objekt zurückgibt, um einen Bereich abzurufen, bestehend aus den Zeilen im ersten Bereich des Range-Objekts. Sie können über Item(row) auf einzelne Zeilen zugreifen, wobei row der relative Zeilenindex vom oberen Rand des ersten Bereichs des Range-Objekts ist. Item kann weggelassen werden, da der Aufruf standardmäßig vom Standardelement von Range an das Element weitergeleitet wird.

Hinweis

Es ist nicht zulässig, den zweiten Parameter von Item für Bereiche, die aus Zeilen bestehen, anzugeben. Sie müssen sie zuerst über Cells in einzelne Zellen umwandeln.

Im folgenden Beispiel werden die Bereiche C8:D8 und C6:D6 des ersten Blatts der aktiven Arbeitsmappe gelöscht.

Worksheets(1).Range("C5:D10").Rows(4).Delete
Worksheets(1).Range("C5:D10").Rows.Item(2).Delete

Verwenden Sie expression_ Columns, wobei expression ein Ausdruck ist, der ein Range-Objekt zurückgibt, um einen Bereich abzurufen, bestehend aus den Spalten im ersten Bereich des Range-Objekts. Sie können über Item(row) [sic] auf einzelne Spalten zugreifen, wobei row der relative Spaltenindex links vom ersten Bereich des Range-Objekts ist, der als Zahl oder als Spaltenadresse im A1-Format angegeben wird. Item kann weggelassen werden, da der Aufruf standardmäßig vom Standardelement von Range an das Element weitergeleitet wird.

Hinweis

Es ist nicht zulässig, den zweiten Parameter von Item für Bereiche, die aus Spalten bestehen, anzugeben. Sie müssen sie zuerst über Cells in einzelne Zellen umwandeln.

Im folgenden Beispiel werden die Bereiche L2:L10, G2:G10, F2:F10 und D2:D10 des ersten Blatts der aktiven Arbeitsmappe gelöscht.

Worksheets(1).Range("C5:Z10").Columns(10).Delete
Worksheets(1).Range("C5:Z10").Columns.Item(5).Delete
Worksheets(1).Range("C5:Z10").Columns("D").Delete
Worksheets(1).Range("C5:Z10").Columns.Item("B").Delete

Verwenden Sie Offset(Zeile, Spalte), wobei Zeile und Spalte die Zeilen- und Spalten-Offsets sind, um einen Bereich mit einem bestimmten Offset an einen anderen Bereich zurückzugeben. Im folgenden Beispiel werden die ersten drei Zellen abwärts einer Zelle und eine Spalte rechts von der Zelle in der oberen linken Ecke der aktuellen Auswahl markiert. Sie können nur Zellen des aktiven Arbeitsblatts auswählen. Daher müssen Sie zunächst das Arbeitsblatt aktivieren.

Worksheets("Sheet1").Activate 
  'Can't select unless the sheet is active 
Selection.Offset(3, 1).Range("A1").Select

Verwenden Sie Union (range1, range2...), um mehrere Flächenbereiche zurückgegeben – d. h. Bereiche, die aus zwei oder mehr zusammenhängenden Zellblöcken bestehen. Im folgende Beispiel wird ein Objekt erstellt, das als Gesamtmenge der Bereiche A1:B2 und C3:D4 definiert wird, und dann wird der definierte Bereich ausgewählt.

Dim r1 As Range, r2 As Range, myMultiAreaRange As Range 
Worksheets("sheet1").Activate 
Set r1 = Range("A1:B2") 
Set r2 = Range("C3:D4") 
Set myMultiAreaRange = Union(r1, r2) 
myMultiAreaRange.Select

Wenn Sie mit Auswahlen arbeiten, die mehr als einen Bereich enthalten, ist die Areas-Eigenschaft hilfreich. Eine Mehrfachauswahl wird in einzelne Bereich-Objekte aufgeteilt und dann werden die Objekte als Sammlung zurückgegeben. Sie können die Count-Eigenschaft aus der zurückgegebenen Sammlung verwenden, um eine Sammlung zu überprüfen, die mehr als einen Bereich enthält, wie im folgenden Beispiel gezeigt.

Sub NoMultiAreaSelection() 
    NumberOfSelectedAreas = Selection.Areas.Count 
    If NumberOfSelectedAreas > 1 Then 
        MsgBox "You cannot carry out this command " & _ 
            "on multi-area selections" 
    End If 
End Sub

In diesem Beispiel wird die Methode AdvancedFilter des Range-Objekts verwendet, um eine Liste der eindeutigen Werte mit der Häufigkeit des Auftretens dieser eindeutigen Werte im Bereich von Spalte A zu erstellen.

Sub Create_Unique_List_Count()
    'Excel workbook, the source and target worksheets, and the source and target ranges.
    Dim wbBook As Workbook
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim rnSource As Range
    Dim rnTarget As Range
    Dim rnUnique As Range
    'Variant to hold the unique data
    Dim vaUnique As Variant
    'Number of unique values in the data
    Dim lnCount As Long
    
    'Initialize the Excel objects
    Set wbBook = ThisWorkbook
    With wbBook
        Set wsSource = .Worksheets("Sheet1")
        Set wsTarget = .Worksheets("Sheet2")
    End With
    
    'On the source worksheet, set the range to the data stored in column A
    With wsSource
        Set rnSource = .Range(.Range("A1"), .Range("A100").End(xlDown))
    End With
    
    'On the target worksheet, set the range as column A.
    Set rnTarget = wsTarget.Range("A1")
    
    'Use AdvancedFilter to copy the data from the source to the target,
    'while filtering for duplicate values.
    rnSource.AdvancedFilter Action:=xlFilterCopy, _
                            CopyToRange:=rnTarget, _
                            Unique:=True
                            
    'On the target worksheet, set the unique range on Column A, excluding the first cell
    '(which will contain the "List" header for the column).
    With wsTarget
        Set rnUnique = .Range(.Range("A2"), .Range("A100").End(xlUp))
    End With
    
    'Assign all the values of the Unique range into the Unique variant.
    vaUnique = rnUnique.Value
    
    'Count the number of occurrences of every unique value in the source data,
    'and list it next to its relevant value.
    For lnCount = 1 To UBound(vaUnique)
        rnUnique(lnCount, 1).Offset(0, 1).Value = _
            Application.Evaluate("COUNTIF(" & _
            rnSource.Address(External:=True) & _
            ",""" & rnUnique(lnCount, 1).Text & """)")
    Next lnCount
    
    'Label the column of occurrences with "Occurrences"
    With rnTarget.Offset(0, 1)
        .Value = "Occurrences"
        .Font.Bold = True
    End With

End Sub

Methoden

Eigenschaften

Siehe auch

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.