Excel: Zellen und Bereiche per VBA

Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!

Im Artikel “Excel: Workbooks und Worksheets per VBA” haben wir uns angesehen, wie wir Arbeitsmappen und Arbeitsblätter mit VBA nutzen können. Im vorliegenden Artikel gehen wir einen Schritt weiter und nehmen uns die offensichtlichen Elemente eines Arbeitsblatts vor – die Zellen. Nicht weniger spannend sind allerdings die Bereiche, unter VBA “Range” genannt. Wie wir diese referenzieren, auslesen und bearbeiten können, zeigen wir auf den folgenden Seiten.

Worksheet referenzieren

Im oben genannten Artikel Excel: Workbooks und Worksheets per VBA (www.access-im-unternehmen.de/326) zeigen wir, wie Du Workbook– und Worksheet-Elemente referenzieren kannst. Im aktuellen Artikel verwenden wir oft das aktuelle Worksheet-Element als Basis für den Zugriff auf verschiedene Eigenschaften wie Range oder Cells.

Dieses können wir mit ActiveSheet referenzieren, allerdings bietet ActiveSheet kein IntelliSense an. Das liegt daran, dass ActiveSheet nicht nur ein Worksheet-Objekt, sondern auch ein Chart-Objekt zurückliefern könnte.

Um diese Einschränkung zu umgehen, referenzieren wir das Worksheet-Objekt jeweils mit folgenden Anweisungen:

Dim wks As Worksheet
Set wks = ActiveSheet

wks ist nun explizit als Worksheet-Objekt deklariert und liefert folglich dessen Elemente per IntelliSense. Wir werden die Deklaration und Zuweisung des aktuellen Worksheets nicht in jedem Beispiel explizit ausführen, sondern nach dem ersten Beispiel einfach mit wks arbeiten.

Gleichwohl sei erwähnt, dass Du innerhalb des VBA-Projekts einer Excel-Arbeitsmappe auch direkt die Range– oder die Cells-Eigenschaft nutzen kannst. Im Direktfenster erhältst Du also beispielsweise mit folgendem Ausdruck den Inhalt der Zelle mit der Adresse A1:

  Range("A1")

Da ich allerdings davon ausgehe, dass Du auch von anderen Anwendungen wie Access, Word oder Outlook oder auch von COM-Add-Ins auf die Inhalte von Excel-Arbeitsmappen zugreifen willst, verwenden wir immer die explizite Angabe der Objekte.

Einzelne Zelle über die A1-Notation per Range referenzieren

Im Excel-Arbeitsblatt erhalten wir schon Hinweise darauf, wie ein Weg zum Referenzieren einer Zelle aussehen könnte (siehe Bild 1).

Die Bezeichnung der aktuellen Zelle, hier A1

Bild 1: Die Bezeichnung der aktuellen Zelle, hier A1

Damit sind die Spalten- und Zeilenüberschriften gemeint, die aus Buchstaben und Zahlen bestehen. Die Spaltenköpfe enthalten zunächst die Buchstaben von A bis Z, dann geht es mit AA bis ZZ weiter und dann mit AAA bis XFD, was der Spalte 16.384 entspricht. Die Zeilenköpfe enthalten die Zahlen von 1 bis 1.048.576.

Eine Zelle hat eine Benennung, die aus dem Buchstaben der Spalte und der Zahl der Zeile besteht. Die Zeile oben links heißt also A1, während die Zeile ganz unten rechts XFD1048576 heißt (ich hoffe, Elon Musk liest das nicht, sonst benennt er sein nächstes Kind nach dieser Zelle).

Diese Bezeichnung ist auch gleichzeitig der erste Weg, mit dem wir auf eine Zelle zugreifen können. Um beispielsweise über den Ausdruck A1 auf eine Zelle zugreifen zu können, verwenden wir die Range-Eigenschaft des Worksheet-Objekts:

Public Sub ZelleMitRange()
     Dim wks As Worksheet
     Set wks = ActiveSheet
     Debug.Print wks.Range("A1")
End Sub

Dies gibt den Inhalt der Zelle im Direktbereich aus.

Einzelne Zelle über die R1C1-Notation per Cells referenzieren

Wenn Du den numerischen Index der Zeile und Spalte der Zelle kennst, die Du referenzieren möchtest, kannst Du auch die Cells-Eigenschaft nutzen.

Diese erwartet als Parameter die Angabe des Zeilenindexes und des Spaltenindexes in der R1C1-Notation.

Das R und das C in dieser Bezeichnung stehen für die englischen Begriffe für Zeile und Spalte, also Row und Cell. Der folgende Ausdruck liefert folglich den Inhalt der Zelle in der ersten Zeile und der ersten Spalte:

Debug.Print wks.Cells(1, 1)

Für eine andere Zeile, zum Beispiel die zweite, änderst Du den Wert des ersten Parameters. So erhältst Du den Inhalt der Zelle A2:

Debug.Print wks.Cells(2, 1)

Aktuelle Zelle referenzieren

Um die aktuelle Zelle zu referenzieren, benötigen wir gar kein Worksheet-Objekt – dieses wird explizit ermittelt. Um den Inhalt der aktuellen Zelle auszugeben, nutzen wir die folgende Anweisung:

Debug.Print ActiveCell

Mehrere Zellen mit Range referenzieren

Während beiden zuvor beschriebenen Beispiele sich jeweils auf das Referenzieren einer einzelnen Zelle beschränkten, können wir mit der Range-Eigenschaft auch mehr als eine Zelle gleichzeitig referenzieren.

Hier können wir die A1-Notation verwenden, über einen kleinen Umweg aber auch die R1C1-Notation. Angenommen, wir wollen einen Bereich mit allen Zellen des Worksheets aus Bild 2 referenzieren.

Beispielzellen

 

Schreibe einen Kommentar