Beruflich Dokumente
Kultur Dokumente
Die Excel-Bibliothek
Damit auf Excel zugegriffen werden kann, muß die Excel-Bibliothek in VBA eingebunden
sein. Dies ist normalweise der Fall, wenn der VBE von Excel aus geöffnet wird. Ansonsten
kann die Excel-Bibliothek auch über den Eintrag „Verweise“ im Extras-Menü des VBE
eingebunden werden („Microsoft Excel … Object Library“).
Die Cells-Eigenschaft
Die Cells-Eigenschaft hat den Typ »Range«.
Direktbereich
? Typename( Excel.Application.Cells )
Range
Direktbereich
? Typename( Cells )
Range
Der Typ »Range« ist der wichtigste Typ in Excel. Er repräsentiert eine Gruppe von Zellen.
Adressen
Range-Objekte haben eine Excel-Adresse, die beschreibt, welche Zellen zu dem Bereich
(englisch: “range”) gehören.
Durch Ausgabe der Excel-Adresse können wir erkennen, daß der Fehlwert der Cells-
Eigenschaft einfach die gesamte Tabelle umfaßt.
Direktbereich
? Cells.Address
$1:$65536
Bei der oben verwendeten Textdarstellung eines Zellbereichs steht »$1« für die erste Zeile des
aktuellen Tabellenblattes und »$65536« für die letzte (der Zahlenwert kann bei neueren
Excel-Versionen auch größer sein als 65536, beispielsweise 1048576). Der Zellbereich
»$1:$65536« umfaßt also alle Zellen der Tabelle.
Tabellenblatt
Spalte Spalte
.---.---------.---------.-
| | A | B |
'---'---------'---------'-
Zeile $1 | 1 | 1| 2|
Zeile $2 | 2 | 3| 4|
Tabellenblatt
| --> 2.) Spalte Spalte
V .---.---------.---------.-
| | 1 | 2 |
1.) '---'---------'---------'-
Zeile | 1 | 1| 2|
Zeile | 2 | 3| 4|
Direktbereich
? Cells( 1, 2 )
2
Die Zahl »2« wird hier aber nur dann ausgegeben, wenn man diesen Wert zuvor in die Zelle
B1 geschrieben hat! Dies kann bei Anzeige der Tabelle von Excel aus (ohne VBA) geschehen.
Direktbereich
? Cells( RowIndex := 1, ColumnIndex := 2 )
2
Wir werden erst etwas später sehen, wo man die Parameternamen (wie »RowIndex«)
nachlesen kann.
Fachenglisch
row [roʊ] Zeile
column [ˈkɑləm] Spalte
index [ˈɪnˌdɛks] (hier) Kennzahl, Versatz
Die Cells-Eigenschaft gehört zum Objektmodell von Excel-VBA. Das heißt: Das Programm
Excel, samt aller Werte in den Zellen der Tabellenblätter, wird in VBA durch Objekte
„modelliert“ (dargestellt, nachgebildet).
Da diese Eigenschaft – zumindest der Schreibweise nach – Argumente akzeptiert, ähnelt sie
stark einer Methode (einer Funktion). Wie der Objektkatalog anzeigt, ist »Cells« aber eine
Eigenschaft.
Der neue Wert der Zelle erscheint dann in der von Excel angezeigten Tabelle.
Tabellenblatt
1 2 3 4 5
.---.---------.---------.---------.---------.---------.-
| | A | B | C | D | E |
'---'---------'---------'---------'---------'---------'-
| 1 | 1| 2| | | |
| 2 | 3| 4| | | |
| 3 | | | | 17| |
| 4 | | | | | |
Zuweisung einer Zeichenfolge an eine Zelle
Let Cells( 4, 4 ) = "abc"
Tabellenblatt
1 2 3 4 5
.---.---------.---------.---------.---------.---------.-
| | A | B | C | D | E |
'---'---------'---------'---------'---------'---------'-
| 1 | 1| 2| | | |
| 2 | 3| 4| | | |
| 3 | | | | 17| |
| 4 | | | |abc | |
| 5 | | | | | |
Zuweisung eines Zeitstempels an eine Zelle
Let Cells( 5, 4 ) = #2056-03-29 17:03:46#
Tabellenblatt
1 2 3 4 5
.---.---------.---------.---------.---------.---------.-
| | A | B | C | D | E |
'---'---------'---------'---------'---------'---------'-
| 1 | 1| 2| | | |
| 2 | 3| 4| | | |
| 3 | | | | 17| |
| 4 | | | |abc | |
| 5 | | | |#########| |
| 6 | | | | | |
Tabellenblatt
1 2 3 4 5
.---.---------.---------.---------.----------------.---------.-
| | A | B | C | D | E |
'---'---------'---------'---------'----------------'---------'-
| 1 | 1| 2| | | |
| 2 | 3| 4| | | |
| 3 | | | | 17| |
| 4 | | | |abc | |
| 5 | | | |2056-03-29 17:03| |
| 6 | | | | | |
Zuweisung einer Formel an eine Zelle
Let Cells( 6, 4 ) = "=D3+1"
Tabellenblatt
1 2 3 4 5
.---.---------.---------.---------.----------------.---------.-
| | A | B | C | D | E |
'---'---------'---------'---------'----------------'---------'-
| 1 | 1| 2| | | |
| 2 | 3| 4| | | |
| 3 | | | | 17| |
| 4 | | | |abc | |
| 5 | | | |2056-03-29 17:03| |
| 6 | | | | 18| |
| 7 | | | | | |
Kopieren des Wertes einer Zelle (6,4) in eine andere Zelle (7,4)
Let Cells( 7, 4 )= Cells( 6, 4 )
Tabellenblatt
1 2 3 4
.---.---------.---------.---------.----------------.-
| | A | B | C | D |
'---'---------'---------'---------'----------------'-
| 1 | 1| 2| | |
| 2 | 3| 4| | |
| 3 | | | | 17|
| 4 | | | |abc |
| 5 | | | |2056-03-29 17:03|
| 6 | | | | 18 <-- Formel
"=D3+1"
| 7 | | | | 18 <-- Zahlenwert
"18"
| 8 | | | | |
Modul1
Option Explicit
Sub Main()
Set R = Cells( 6, 4 )
Debug.Print R.Value
End Sub
Sub Kopieren
Set r = Cells( 1, 1 )
Let r = 1
End Sub
Direktbereich
? Typename( Cells(1,1).Interior )
Interior
? Typename( Cells(1,1).Interior.ColorIndex )
Long
Modul1
Option Explicit
Sub Main()
Dim R As Excel.Range
Set R = Cells( 6, 4 )
Const Hellblau = 37
End Sub
Der folgende Quelltext könnte jedoch nicht am Ende des obigen Subs verwendet werden, da
der Typ »Long« kein Typ eines Objekts ist.
Quelltext
Die Value-Eigenschaft
Falls ein Bereich nur eine Zelle umfaßt (oder nicht-rechteckig ist), so ist die Eigenschaft
»Value« die Fehleigenschaft des Bereiches.
Modul1
Option Explicit
Sub Main()
Dim R As Excel.Range
Set R = Cells( 6, 4 )
Debug.Print R.Value
Debug.Print R
End Sub
Falls eine andere Eigenschaft verwendet werden soll, so muß diese ausdrücklich angegeben
werden.
Modul1
Option Explicit
Sub Main()
Dim R As Excel.Range
Set R = Cells( 6, 4 )
Debug.Print R.Formula
End Sub
Die Item-Eigenschaft
Falls ein Bereich rechteckig ist und mehr als eine Zelle umfaßt, so ist die Eigenschaft »Item«
die Fehleigenschaft des Bereiches.
Sie erlaubt eine Auswahl einer Zeile, Spalte oder Zelle durch Angabe von Positionszahlen.
Modul1
Option Explicit
Sub Main()
Dim R As Excel.Range
Set R = Cells
Debug.Print R.Item( 6, 4 )
Debug.Print R( 6, 4 )
End Sub
In der Zeile »Set range = Cells« steht »Cells« rechts vom Gleichheitszeichen nicht für
eine Fehleigenschaft von »Cells«, sondern für das Objekt »Cells« selber. (Dies ist immer so
rechts vom Gleichheitszeichen einer Set-Anweisung, falls die rechte Seite nicht
eingeklammert ist.)
Microsoft-Dokumentation
docs.microsoft.com/en-us/office/vba/api/excel.range.item
In einigen Quellen wird zur Vereinfachung (oder weil die Autoren es selber nicht besser wissen) gesagt, daß
»Item« die Fehleigenschaft von Range-Objekten ist. Tatsächlich haben wir aber schon erfahren, daß
manchmal auch »Value« als Fehleigenschaft herangezogen wird. Genaugenommen kann ein Objekt aber
immer nur eine Fehleigenschaft haben und die tatsächlich Fehleigenschaft von Range-Objekten ist weder
»Item« noch »Value«, sondern »_Default«. Dieses Detail muß man aber nicht wissen, und daher wird es
weiter unten nur für neugierige Leser noch etwas vertieft werden.
Nützliche Subs
Das Sub »Drucke« erlaubt es ein Tabellenblatt als Ausgabeziel für VBA zu verwenden.
Modul1
Option Explicit
End Sub
Sub Main()
Drucke "alpha"
Drucke 12
End Sub
Tabelle
1 2
.---.---------.---------.-
| | A | B |
'---'---------'---------'-
| 1 |alpha | |
| 2 | 12| |
| 3 | | |
Übungsaufgaben
/ Übungsaufgabe
Schreiben Sie ein Sub, das den Inhalt der Zellen ›A1‹ und ›A2‹ summiert und das Ergebnis in
die Zelle ›A3‹ schreibt.
Sie können für diese Aufgabe davon ausgehen, daß zwei Zahlen in ›A1‹ und ›A2‹ stehen und
sollten daher vor dem Schreiben des Subs (ohne VBA) jeweils eine Zahl in ›A1‹
beziehungsweise ›A2‹ schreiben.
Reserveaufgaben
/ Reserveaufgabe
Schreiben Sie ein Sub, das die Texte aus den Zellen ›A1‹ und ›B1‹ mit einem Komma getrennt
hintereinanderschreibt und das Ergebnis in die Zelle ›C1‹ schreibt.
Sie können für diese Aufgabe davon ausgehen, daß zwei Zeichenfolgen (Texte) in ›A1‹ und
›B1‹ stehen und sollten daher vor dem Schreiben des Subs (ohne VBA) jeweils ein Wort in
›A1‹ beziehungsweise ›B1‹ schreiben.
Direktbereich
? Cells( 1 ).Address
$A$1
? Cells( 2 ).Address
$B$1
$IV$1
$A$2
Beobachtung ⃗
Modul1
Debug.Print VBA.[_HiddenModule].ObjPtr(Ob)
Set O = Ob
End Function
Sub Main()
End Sub
Direktbereich
651380
644276
Falsch
Objektkatalog zu „Range._Default“
Sie muß mit »Cells.[_Default]« angesprochen werden, da der Grundstrich ohne die
eckigen Klammern nicht erlaubt ist.
Direktbereich
? Typename( Cells.[_Default] )
Variant()
Der Typ »Variant()« ist der Typ einer Variant-Reihung. Eine Variant-Reihung akzeptiert
einige Zahlen und ergibt daraufhin einen anderen Wert (vom Typ »Variant«). Hier werden
normalerweise zwei Zahlen verwendet.
Auch beim Eintippen von »? Cells(« im Direktbereich erscheint unter einigen VBA-
Implementation das gelbliche Info-Kästchen „_Default([RowIndex],
[ColumnIndex])“.
Die _Default-Eigenschaft erwartet zwei Zahlen und ergibt daraufhin den Wert des aktuellen
Tabellenblatts in der entsprechenden Zeile und Spalte.
Direktbereich
? Cells.[_Default]( 1, 2 )
2
Die Zahl »2« wird hier aber nur dann ausgegeben, wenn man diesen Wert zuvor in die Zelle
B1 geschrieben hat!
Direktbereich
? Cells.Item( 1, 2 )
2
Im Gegensatz zu »Item« weist »_Default« nur die eine Besonderheit auf, daß es keine
Reihung, sondern (per ».Value«) einen einfachen Wert ergibt, wenn der Bereich (vor dem
Punkt ».«) nur eine Zelle umfaßt, sonst verhält es sich wie ».Item« und erwartet noch
eingeklammerte Zahlen. (Ein Beispiel dazu, daß keine Zahlen angegeben werden müssen
folgt später.)
Da »_Default« die Fehleigenschaft von Range-Objekten ist, kann man es auch weglassen.
Damit kann »Cells.[_Default]( 1, 2 )« zu »Cells( 1, 2 )« verkürzt werden.
Direktbereich
? Cells( 1, 2 )
2