Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Verwendung Integrierter Funktionen | VBA Fundamentals
Excel VBA für Geschäftsautomatisierung

Verwendung Integrierter Funktionen

Swipe um das Menü anzuzeigen

VBA wird mit mehreren hundert integrierten Funktionen ausgeliefert, von denen die meisten selten verwendet werden. Die folgenden Funktionen sind jedoch in der Geschäftsautomatisierung besonders häufig im Einsatz – zur Bereinigung von Texten, zur Arbeit mit Datumsangaben und zur Typkonvertierung.

Datumsfunktionen

Debug.Print Now()                    ' current date and time
Debug.Print Date                     ' today's date only
Debug.Print DateAdd("d", 30, Date)   ' 30 days from today
Debug.Print DateDiff("d", #01/09/2023#, Date)  ' days since hire date
Debug.Print Format(Date, "dd/mm/yyyy")

Now() und Date sehen ähnlich aus, beantworten aber unterschiedliche Fragen – Now() enthält die aktuelle Uhrzeit bis zur Sekunde (nützlich zur Zeitstempelung, wann ein Makro ausgeführt wurde), während Date nur das Kalenderdatum liefert, was für Fälligkeiten oder Altersberechnungen benötigt wird. DateAdd und DateDiff sind Gegenstücke: DateAdd verschiebt ein Datum vorwärts oder rückwärts um eine bestimmte Einheit ("d" für Tage, aber auch "m" für Monate und "yyyy" für Jahre), während DateDiff die Differenz zwischen zwei bestehenden Daten misst.

Note
Hinweis

VBA-Datumsliterale – alles, was zwischen #-Symbolen steht, wie #01/09/2023# – verwenden intern immer die Reihenfolge MM/DD/YYYY, unabhängig von den Windows-Regionseinstellungen oder der System-Sprache. Daher bedeutet #01/09/2023# 9. Januar 2023 und nicht 1. September, selbst für Lernende, deren übliches Datumsformat TT/MM/JJJJ ist. Dies unterscheidet sich von der Eingabe in eine Arbeitsblattzelle, bei der die Regionseinstellungen gelten – das #...#-Literalformat ist eine VBA-spezifische Regel, die immer gleich bleibt, egal wo der Code ausgeführt wird.

Textfunktionen

Debug.Print UCase("wireless mouse")     ' WIRELESS MOUSE
Debug.Print LCase("WIRELESS MOUSE")     ' wireless mouse
Debug.Print Left("P001", 1)             ' P
Debug.Print Right("P001", 3)            ' 001
Debug.Print Mid("P001", 2, 3)           ' 001
Debug.Print Trim("  Keyboard  ")        ' Keyboard
Debug.Print Len("Laptop Stand")         ' 12
Debug.Print InStr("Wireless Mouse", "Mouse")  ' 10 (position found)

UCase und LCase werden verwendet, um Vergleiche ohne Berücksichtigung der Groß-/Kleinschreibung durchzuführen, zum Beispiel: If UCase(category) = UCase("electronics") Then funktioniert unabhängig davon, wie die Kategorie ursprünglich eingegeben wurde. Left, Right und Mid extrahieren jeweils einen Teil eines Strings, unterscheiden sich aber darin, von wo gezählt wird: Left und Right zählen von den beiden Enden, während Mid eine Startposition und eine Länge benötigt. Deshalb liefern Mid("P001", 2, 3) und Right("P001", 3) im Beispiel das gleiche Ergebnis – "P001" hat nur ein Präfix-Zeichen, sodass "ab Position 2" und "die letzten 3 Zeichen" auf denselben Teilstring zeigen. Trim entfernt unauffällig führende und nachfolgende Leerzeichen – eine unscheinbare Funktion, die bei kopierten Daten mit uneinheitlichen Abständen oft hilfreich ist. InStr sucht einen String in einem anderen und gibt die Position zurück, an der er gefunden wurde (oder 0, falls nicht vorhanden). Damit lässt sich prüfen, ob ein Produktname das Wort "Mouse" enthält, ohne eine exakte Übereinstimmung zu benötigen.

Numerische Funktionen

Debug.Print Round(24.996, 2)   ' 25
Debug.Print Abs(-15)           ' 15
Debug.Print Int(7.9)           ' 7

Round und Int verkleinern beide eine Zahl, aber auf unterschiedliche Weise – Round(24.996, 2) rundet auf den nächsten Wert mit 2 Dezimalstellen (25,00, angezeigt als 25), während Int(7.9) immer auf die nächstkleinere Ganzzahl abrundet, unabhängig davon, wie nah die Dezimalstelle am Aufrunden ist, und ergibt 7 statt 8. Diese Verwechslung ist eine häufige Fehlerquelle bei Preisberechnungen: Das Runden eines Preises auf den nächsten Cent sollte fast immer mit Round erfolgen, nicht mit Int, sonst wird systematisch bei jeder Transaktion ein Bruchteil eines Cents zu wenig berechnet.

Typkonvertierung

Wichtig beim Auslesen von Werten aus einem Arbeitsblatt, da Zellwerte oft als Variant ankommen:

Dim priceText As String
priceText = "39.50"
Dim price As Double
price = CDbl(priceText)     ' text → number
 
Dim stockValue As Variant
stockValue = "44"
Dim stockCount As Integer
stockCount = CInt(stockValue)

CDbl konvertiert zu Double, CInt zu Integer, CStr zu String und CDate zu einem gültigen Date-Wert.

Warum nicht einfach VBA automatisch konvertieren lassen? Das funktioniert meistens, ist aber fehleranfällig: Eine Zelle, die wie eine Zahl aussieht, aber tatsächlich als Text eingegeben oder importiert wurde, kann dazu führen, dass ein Vergleich oder eine Berechnung fehlschlägt oder unerwartet funktioniert. Die explizite Konvertierung erkennt solche Fehler frühzeitig – mit einer Fehlermeldung genau an der Zeile mit den fehlerhaften Daten, statt erst mehrere Schritte später.

Aufgabe

  1. Eine Zeile schreiben, die mit Mid nur den numerischen Teil von "P003" extrahiert (Tipp: Beginne bei Position 2).
  2. Eine Zeile schreiben, die den extrahierten Text mit CInt oder CLng in eine echte Zahl umwandelt.
  3. Mit DateDiff berechnen, wie viele Tage seit der Einstellung von Emma Davis vergangen sind (15.03.2020) im Vergleich zu heute.
Tipp
expand arrow

1. Den numerischen Teil extrahieren

  • Mid benötigt drei Angaben: den eigentlichen String, die Startposition und wie viele Zeichen übernommen werden sollen.
  • "P003" besteht aus einem Buchstaben, gefolgt von drei Ziffern — der Buchstabe "P" soll übersprungen und alles danach übernommen werden.
  • Startposition 2 bedeutet "beginne beim zweiten Zeichen" — zähle "P003" an den Fingern ab, um zu bestätigen, dass Position 2 die erste "0" ist.

2. In eine echte Zahl umwandeln

  • Was Mid zurückgibt, ist weiterhin Text, auch wenn es wie eine Zahl aussieht.
  • Die gesamte Mid(...)-Ausgabe in CInt(...) oder CLng(...) einbetten — so wird das Ergebnis einer Funktion mit einer anderen konvertiert.
  • Erinnerung aus einem früheren Kapitel: CInt/CLng wandeln Text in eine Ganzzahl um; verwende CLng, falls die Zahl eventuell größer sein könnte.

3. Tage seit dem Einstellungsdatum

  • DateDiff benötigt drei Angaben: die Einheit der Messung ("d" für Tage), ein Anfangsdatum und ein Enddatum.
  • Die Herausforderung ist, ein Datums-Literal in VBA zu schreiben — dieses wird mit #-Symbolen umschlossen, z. B. #03/15/2020#. Innerhalb von #...# erwartet VBA immer die Reihenfolge Monat/Tag/Jahr, unabhängig von den regionalen Einstellungen — also ist der 15. März #03/15/2020#, nicht #15/03/2020#.
  • Für "heute" muss kein Datum eingegeben werden — es gibt ein Schlüsselwort aus Abschnitt 2.3, das immer das aktuelle Datum zurückgibt.
  • Beide Daten in DateDiff in der richtigen Reihenfolge angeben — zuerst das frühere Datum — sonst erhältst du eine negative Zahl.
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 3

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 2. Kapitel 3
some-alt