Microsoft Excel

Bekanntlich gibt es in Excel Arbeitsmappen, die wiederum aus Arbeitsblättern bestehen. Innerhalb eines Arbeitsblatts gibt es Zellen, die zu Zellbereichen zusammengefasst werden können. In jedem Arbeitsblatt ist stets genau eine Zelle die aktive Zelle. Wechselt man das Arbeitsblatt, ist auch automatisch eine andere, darin enthaltene Zelle die aktive Zelle. Für VBA sind all das Objekte.

Hier sehen wir eine Mappe namens „Mappe1.xlsm“ mit 4 Arbeitsblättern, auf die sich die folgenden Beispiele beziehen. Tabelle1 ist aktiv, darin ist B2:C4 als „MeinBereich“ benannt und zugleich auch ausgewählt. B2 ist die aktive Zelle:

Mappe1.xlsm
 ✗   ✔   ƒx   =ZUFALLSBEREICH(1;6)
    ABCDE
1 Team1Team2
2 1. Würfel13
3 2. Würfel63
4 3. Würfel26
5
6
 Tabelle1  Tabelle2  Tabelle3  Tabelle4

Bereiche

In VBA gibt es für Arbeitsmappen Workbook-, für Arbeitsblätter Worksheet-, für Zellen Cells- und für Bereiche Range-Objekte. Diese Objekte sind natürlich auch über die entsprechende Auflistung des jeweils übergeordneten Objekts ansprechbar. Einfacher geht es oft, mit ActiveWorkbook, ActiveSheet oder ActiveCell auf die aktiven Objekte zuzugreifen. Die folgenden Debug.Print-Anweisungen geben stets den gleichen Wert, nämlich die aktive Zelle B2 aus:

Public Sub Zellwert()

Debug.Print Workbooks("Mappe1.xlsm").Worksheets(1).Range("B2")
Debug.Print Workbooks(1).Worksheets("Tabelle1").Range("B2")
Debug.Print Workbooks(1).Worksheets("Tabelle1").Cells(2, 2)
Debug.Print ActiveWorkbook.Worksheets("Tabelle1").Cells(2, 2)
Debug.Print ActiveSheet.Cells(2, 2)
Debug.Print ActiveCell
Debug.Print Workbooks(1).Worksheets(1).Range("MeinBereich").Cells(1)

End Sub

Sowohl Range als auch Cells geben Bereiche zurück. Sie unterscheiden sich allerdings, wie man sieht, in der Syntax. Außerdem kann Cells immer nur genau eine Zelle zurückgeben, während es bei Range mehrere sein können, wie das letzte Beispiel zeigt. Dort wird aus dem, mit Range angegebenen Bereich „MeinBereich“ die erste Zelle zurückgegeben, und zwar wiederum mit Cells. In der Praxis nutzt man Cells zumeist als zweidimensionales Array, man kann aber auch, wie im letzten Beispiel, nur einen Parameter angeben - dann wird der gesamte Bereich zeilenweise durchlaufen.

Listen

Ein häufiges Einsatzgebiet für VBA in Excel ist das Durchlaufen einer Liste. Die folgende Sub zeigt, wie man das lösen kann: Hier wird einfach nur „erledigt“ in Spalte D geschrieben, aber natürlich könnte man so beispielsweise auch in jeder Zeile einen Wert auslesen und anhand dessen bestimmen, was passieren soll.

Public Sub Erledigt()
Dim Zelle As Range

Set Zelle = ActiveSheet.Range("MeinBereich").Cells(1)

Do Until IsEmpty(Zelle.Value)       'Solange Zellen gefunden werden ...
    Zelle.Offset(0, 2) = "erledigt" '... Schreibe "erledigt" in Spalte D
    Set Zelle = Zelle.Offset(1)     '    und gehe 1 Zeile nach unten
Loop

End Sub


Formeln

Während man Werte einfach in Zellen schreiben kann, muss man für Formeln die Zelleigenschaft FormulaLocal (oder, falls man sprachunabhängigen Code schreiben will, Formula) verwenden:

ActiveSheet.Range("MeinBereich").FormulaLocal = "=ZUFALLSBEREICH(1;6)"

Will man umgekehrt Excelfunktionen in VBA verwenden, geht das mit dem WorksheetFunction-Objekt:

Debug.Print WorksheetFunction.Pi
 3,14159265358979

Wie schon an anderer Stelle im Tutorial erwähnt, kann eine Public Function in Excel wie eine normale, in Excel eingebaute Funktion verwendet werden (sog. Userdefined Function, UDF).

Ein vollständiger Überblick über das Objektmodell findet sich auf den Seiten von Microsoft. Alternativ kann man auch ein Buch zu Microsoft Excel bei Amazon kaufen. Bei den Lesern des VBA-Tutorials sind dabei besonders Einstieg in VBA mit Excel und VBA mit Excel: Das umfassende Handbuch beliebt.