Achtung “ “ werden hier falsch angezeigt, sie müssen immer oben stehen!!!!
1. Grundsätzliches
In VBA (sowie in vielen anderen Programmiersprachen) wird erst das Objekt (zum Beispiel eine Zelle) genannt mit dem etwas passieren soll, dann die Eigenschaft (zum Beispiel Farbe) und dann die konkrete Ausprägung (zum Beispiel pink).
Beispiel
Range(„E5“).Font.Color = 1500
oder
Cells(6, 5).Value = „Dies ist eine VBA-Übung“
Inhalt von Zellen & Formatierung
Einzelne Zellen können mit den Befehlen
- Range(„E5“) -> Spalte E Zeile 5
oder mit - Cells(3,5) -> 3. Zeile, 5. Spalte (E)
angesprochen werden.
Mit können allerdings auch Bereiche festgelegt werden:
Bsp: Range(„B3:E10“).value = „xxx“
schreibt in jede Zelle (also in 32 Zellen!!) des Bereiches xxx rein.
Eigenschaften von Zellen
Grundsätzlich können dies alle Eigenschaften sein, die Du in Excel festlegen kannst. Dies sind zum Beispiel:
Schriftfarbe: Font.Color = VbColor Name
-
Range("a1").Font.Color = vbRed
- vbBlack (schwarz)
- vbBlue
- vbCyan (türkis)
- vbGreen
- vbMagenta (pink)
- vbRed
- Ivbwhite
- vbYellow
oder:
Range("a1").Font.Color = RGB(255,255,0)
Cells(zeile, spalte).Font.Color = RGB(0,5,100)
RGB steht für rot, grün, blau. Die Zahlen bewegen sich jeweils zwischen 0 und 256. Welche Zahlen eine Farbe ergeben kannst Du hier nachlesen:
https://www.farb-tabelle.de/de/farbtabelle.htm
Hintergrundfarbe der Zelle Interior.ColorIndex.
Beispiele:
Cells(zeile, spalte).Interior.ColorIndex = 45
Range("a1").Font.ColorIndex = 36
Der Colorindex ist eine Zahl zwischen 1 und 56. Welche Hintergrundfarbe sich ergibt kannst Du ausprobieren.
Umrandungen
- .BorderAround
Details zur Rahmenformatierung findest Du hier: https://www.automateexcel.com/de/vba/zellenrahmen/
- Bsp.:
Range(„C4:F15“).BorderAround LineStyle:=xlContinuous, Weight:=xlThick, Color:=vbRed
Löschen
Inhalt & Formatierung löschen: clear
Bsp.: Range(Cells(1, 1), Cells(5, 4)).Clear
-> In diesem Bereich werden sowohl Inhalt als auch Formatierung gelöscht.
Sonstiges
- Fett: .Font.Bold = True nicht mehr fett: .Font.Bold = False
- Kursiv: .Font.Italic = True nicht mehr kursiv: .Font.Italic = False
- Schriftgröße: Font.Size
- Schriftart: Font.Name
- Zeilenhöhe festlegen: Rows(„1:1“).RowHeight = 30
- Spaltenbreite setzen: Columns(„A“).ColumnWidth = 30 oder Columns(„A:G“).ColumnWidth = 15 oder Columns(„A:B“).Autofit
Beispiele
Range("a1").Font.Bold = True
Range("a1").Font.italic = True (kursiv)
Range("a1"). Font.Size = 26
Range("a1").Font.Name ="Arial"
Zellen zentrieren und ausrichten
Erst werden die Zellen selektiert:
Range(„a15:F16“).Select
Dann werden die selektierten Zellen ausgerichtet zum Beispiel:
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
Im Anschluss werden die selektierten Zellen verbunden:
Selection.Merge
Tabellenblätter benennen
Das aktive Tabellenblatt wird mit ActiveSheet. angesprochen. Mit ActiveSheet.Name = “ Mein Name“ wird dann der Name festgelegt.
Rechnen in VBA
Wie Du sicher weißt, geeignet Excel (und somit auch VBA) sehr gut zum rechnen. Dazu musst Du lediglich einer Zelle den Wert (Ergebnis) zuweisen.
Addition:
Beispiel: In D10 soll nun das Ergebnis der Addition von B10 + C10
Cells(10,4).value = Cells(10,3).value + Cells(10,2).value
Cells(10,4) = Cells(10,3) + Cells(10,2) funktioniert auch.
Subtraktion:
Beispiel: In D10 soll nun das Ergebnis der Addition von B10 – C10
Cells(10,4) = Cells(10,3) – Cells(10,2)
Multiplikation/Division funktioniert mit den Rechenzeichen * bzw. /.
Potenzieren funktioniert mit den Rechenzeichen ^ ;
Bsp.: 2^3 = 8 (2 hoch 3)
Wurzel ziehen funktioniert mit den Rechenzeichen ^ ;
Bsp.: 8^(1/3) = 2 -> hier die 3. Wurzel aus 8;
-> ^ 1/n-> n-te Wurzel
Eingabe der Werte durch eine Inputbox
Durch den Befehl InputBox(„bitte geben Sie die erste Zahl ein“) erscheint diese Box.
Durch den Befehl cells(10,2) = InputBox(„bitte geben Sie die erste Zahl ein“) wird die Benutzereingabe (also die eingegebene Zahl) zusätzlich in die Zelle B10 geschrieben.
Ausgabe der Werte durch eine Messagebox
Durch den Befehl MsgBox „Das Ergebnis lautet “ & Cells(10, 4) wird der Wert der Zelle D10 in einer Messagebox ausgegeben.
MsgBox „Heute ist der “ & Date“
– > Es wird eine Messagebox mit den heutigen Datum erzeugt
Deklaration (=Festlegen) von Variablen
Bisher haben zu immer wenn wir Daten, die der Benutzer eingegeben hat (zum Bsp.: Schriftgröße, Schriftfarbe, etc. ) verarbeiten wollten, in eine Zelle geschrieben und haben dann durch den Cells bzw. Range-Befehlt darauf zugegriffen.
Dies geschieht in der Informatik i.d.R. einfacher. Es wird eine Variable definiert, in die dieser Wert dann reingeschrieben wird.
VBA-Syntax: Dim VariablenName as <Datentyp>
Beispiele:
Dim schriftgroesse as integer ->Variable wird definiert
schriftgroesse= InputBox(„bitte geben Sie die Schriftgröße ein!“)
->Schriftgröße wird durch den Benutzer eingegeben und in die Variable geschrieben
cells(1,1).Font.Size = schriftgroesse
-> Die Schrift in der Zelle A1 wird auf diese Größe gesetzt.
Zur Festlegung (Deklaration) von Variablen muss der Name und der Datentyp festgelegt werden.
Gängige Datentypen sind u.a. Integer (ganze Zahl), Double ( Zahl mit Nachkommastellen), Date (im Format MM/TT/YYYY) und String (Text, d.h. beliebige Zeichen
Beispiele:
Dim KerstinsZahl as integer
Dim KerstinsName as String
Dim KerstinsNachkommaZahl as Double
Dim KerstinsGeburtsdatum as Date
Zuordnen von Werten in Zellen
Dim laufzeit as Integer
laufzeit = InputBox(„Wie lange möchten Sie den Kredit abbezahlen?“)
Range(„c5“).Value = laufzeit
-> Es wird durch eine Inputbox die laufzeit abgefragt, in der Variablen laufzeit gespeichert und in die Zelle C5 geschrieben.
… oder mit Variablen
Dim Zeile, Spalte as integer
Zeile = 5
Spalte=3
Cells(Zeile, Spalte ).Value = „Laufzeit“
-> in C5 wird der Wert reingeschrieben.
Zuordnen von Werten in Variablen
Spalte = Spalte +1
-> Die Variable Spalte wird um eins hochgezählt.
Jahr=Year(Date)
-> Die Variable Jahr wird auf das Jahr des aktuellen Datums gesetzt.
Dim ergebnis, zahl As Double
Dim exponent As Integer
exponent = 3
zahl =2
ergebnis = zahl ^exponent
-> In der Variablen ergebnis steht nun 8 (2 hoch 3)
Selektieren von Zellen / Bereichen
Oft müssen Zellen bzw. Bereiche selektiert (=markiert) werden, um sie zu formatieren:
Beispiele:
Range(„C6“).Select
Cells(2,2).Select
Beispiel für das Selektieren von Bereichen mit Variablen:
Dim zeileA, zeileE, spalteA, spalteE As Integer
zeileA = 5
zeileE = 10
spalteA = 2
spalteE = 4
Range(Cells(zeileA, spalteA), Cells(zeileE, spalteE)).Select
-> Der Bereich von B5 bis D10 wird selektiert
Formatieren – Beispiele
Mit dem Befehl Format können Felder formatiert werden.
Parameter für den VBA-Befehl „Format“
Syntax: FORMAT(wert, Format)
Beispiele:
Zahlenformate
dim wert as double
(wert ist hier eine Variable, in der eine Zahl steht)
- FORMAT(wert, „0.00“)-> Zahl mit 2 Nachkommastellen
- FORMAT(wert, „#,##0.00“) -> 4.711,00; # Platzhalter für eine Ziffer. Diese wird aber nur angezeigt, wenn sich an dieser Stelle auch wirklich eine Ziffer befindet.
- FORMAT(wert, „currency“) -> Liefert das voreingestellte Währungsformat 4.711,00 €
- FORMAT(wert, „0.0 %“) -> % Wandelt die Zahl in Prozent um, indem es die Zahl mit 100 multipliziert und ein %-Zeichen anhängt 471,1 % =
Eine andere Möglichkeit Zellen zu formatieren besteht darin, sie zu selektieren und ihnen dann Formatierungen zu zuweisen.
Beispiele
Range(Cells(zeileA, spalteA), Cells(zeileE, spalteE)).Select
Selection.Font.Bold = True
Selection.NumberFormat = „0_ ;-0 „
-> Es wird ein Bereich selektiert und dann fett und als Zahl ohne Nachkommastellen formatiert.
oder Bereich selektieren, fett und zentriert
Range(„B9:F9“).Select
Selection.Font.Bold = True
With Selection .HorizontalAlignment = xlCenter
End With
… als Euro-Wert:
Cells(zeile, spalte).Select I selektieren des Bereichs
Selection.NumberFormat = _ „_-* #,##0.00 [$€-de-DE]_-;-* #,##0.00 [$€-de-DE]_-;_-* „“-„“?? [$€-de-DE]_-;_-@_-“
oder als %-Wert
Range(„C6“).Select
Selection.Style = „Percent“
Selection.NumberFormat = „0.00%“
oder als ganze Zahl ohne Tausenderpunkt
Selection.NumberFormat = „0_ ;-0 „
_VBA-syntax-Info_________________________________________________
Bedingungsprüfungen (If…)
Es werden 2 Fälle unterschieden:
If Cells(1 , 1 ).Value < 0
Then Cells(1 , 1 ).Interior.ColorIndex = 38 (pink)
Else Cells(1 , 1 ).Interior.ColorIndex = 48 (grau)
End If
–> In Abhängigkeit des Wertes der Zelle A1 wird der Hintergrund pink oder grau.
Bei mehr Fällen:
Syntax:
If condition
[ Then ] [ statements ]
[ ElseIf elseifcondition [ Then ]
[ elseifstatements ] ]
[ Else [ elsestatements ] ]
End If
Beispiele:
In Abhängigkeit der Zahl in der Zelle A1, wird ihre Hintergrundfarbe gesetzt:
If Cells(1 , 1 ).Value < 0 Then
Cells(1 , 1 ).Interior.ColorIndex = 38 (pink)
elseif Cells(1 , 1 ).Value <10 Then
Cells(1 , 1 ).Interior.ColorIndex = 50 (grün)
Else
Cells(1 , 1 ).Interior.ColorIndex = 48 (grau)
End If
If performance = 1 Then
Bonus = salary * 0.1
ElseIf performance = 2 Then
Bonus = salary * 0.09
ElseIf performance = 3 Then
Bonus = salary * 0.07
Else
Bonus = 0
End If
-> Die If-Bedingung (entspricht der WENN-Funktion) kann viele Fälle enthalten.
Schleifen
For-Schleife …
Syntax:
For counter [ As datatype ] = start To end [ Step step ] [ statements ] [ Continue For ] [ statements ] [ Exit For ] [ statements ] Next [ counter ]
https://docs.microsoft.com/de-de/dotnet/visual-basic/language-reference/statements/for-next-statement
Beispiel
Dim zeile, spalte, ende, zahl As Integer
zeile = 5
spalte = 2
ende = 10
For zahl = 0 To ende
Cells(zeile, spalte).Value = zahl
Cells(zeile, spalte).Interior.ColorIndex = 1 + zahl
zeile = zeile + 1
Next
-> Von Zeile 5 bis 10 in Spalte B wird der Zellenhintergrundverändert.
Beispiel:
Sub farbe10x10()
Range(„B3“, „Z54“).clear
Dim z, sp, zae1, zae2, farbe As Integer
sp = 2
For zae1 = 1 To 10
z = 3
For zae2 = 1 To 10
farbe = Round(Rnd * 56, 0)
Cells(z, sp).Interior.ColorIndex = farbe
Cells(z, sp).Value = farbe
z = z + 1
Next
sp = sp + 1
Next
While-Schleife
Syntax:
While condition [ statements ] [ Continue While ] [ statements ] [ Exit While ] [ statements ] End While
Do While-Loop
Syntax:
Do While condition
Statements
Loop
Beispiel:
Dim zeile, spalte, ende, zahl As Integer
zeile = 5
spalte = 2
zahl = 1
ende = 20
Do While zahl < ende. (Bedingung)
Cells(zeile+zahl, spalte).Value =zahl (Statements)
zahl = zahl +1
Loop
Die Zahl wird von 1 bis 19 hochgezählt und in die Spalte B geschrieben.
x=0
Do
x = x + 1
Cells(x, 1).Value = x
Loop Until x > 5
Userforms
Öffnen einer Userform: <userform-Name>.show
Bsp.: KerstinsUF.show
Aufrufen von Subs
Mit
Call Subname
können innerhalb einer Routine andere aufgerufen werden. Dies bietet sich insbesondere dann an, wenn diese Routine häufiger gebraucht werden.