Case-Statements in VBA

Je nach Komplexität Deines Makro-Vorhabens kommen diverse Konditionen zur Geltung. Populär ist die Verwendung von IF-Statements (Wenn-Dann) - oder gar "If-Then-Else" (Wenn-Dann-Sonst). In einem früheren Beitrag (If-Statement mit Platzhalter & Like-Operator (VBA)) wurde ein konkretes Beispiel mit dem weiteren Einsatz von "ElseIf" dargestellt. Sind jedoch mehrere Konditionen oder Fälle bereits im Vorfeld bekannt, kannst Du anstelle dessen eine (bessere) Alternative mit "Case-Statements" (Case = Fall) erarbeiten. In anderen Programmiersprachen wird auch von "Switch" gesprochen.

Hast Du beispielsweise 4 Quartale, in denen unterschiedliche Prozeduren zur Anwendung kommen, verwende alternativ einmal ein "Case-Statement", welches wie folgt aufgebaut ist:

Sub CaseStatement()

Dim str_AktuellesQuartal As String

str_AktuellesQuartal = "Q4"

Select Case str_AktuellesQuartal
Case "Q1"
'Code für Q1...
MsgBox ("Du befindest Dich im ersten Quartal.")

Case "Q2"
'Code für Q2...
MsgBox ("Du befindest Dich im zweiten Quartal.")

Case "Q3"
'Code für Q3...
MsgBox ("Du befindest Dich im dritten Quartal.")

Case "Q4"
'Code für Q4...
MsgBox ("Du befindest Dich im vierten Quartal.")
End Select

End Sub

Der Variableninhalt "str_AktuellesQuartal" steuert also, welcher Teil-Bereich Deines Makros ausgeführt werden soll. Falls der Inhalt auf keinen der definierten Cases zutritt, wird die Verarbeitung nach dem "Select-Statement" weitergeführt. Um diese unerwartete Eingabe-Werte aufzufangen (Ausnahme-Handling), kannst Du zudem "Case Else" einfügen und dort Deine Arbeitsschritte hinterlegen, beispielsweise "MsgBox ("Unerwarteter Eingabe-Wert verwendet!")".

Arbeiten mit numerischen Werten

Wir können anstelle von Text auch Zahlen und Zahlenbereiche angeben. Hier ist ein Beispiel mit Zahlen zwischen 1 bis 20 sowie dem "Case Else", welcher uns über unerwartete Zahlen und Eingaben informiert.

Sub CaseStatementNumeric()

Dim int_MeineZahl As Integer

int_MeineZahl = 10

Select Case int_MeineZahl
Case 1 To 2
MsgBox ("Zahl zwischen 1 und 2")

Case 3 To 9
MsgBox ("Zahl zwischen 3 und 9")

Case 10 To 20
MsgBox ("Zahl zwischen 10 und 20")

Case Else
MsgBox ("Unerwartete Zahl/Wert eingegeben")
End Select

End Sub

WM 2022 - Tippspiel-Vorlage

In einem Monat - vom 20. November bis 18. Dezember 2022 - bestreiten 32 Mannschaften die Weihnachts-WM in Katar. In Erwartung des Turniers beginnt derweil die Planung von Tippspielen unter Arbeitskollegen oder Freunden und Bekannten. Wie bereits für vergangene Turniere stelle ich Dir hier wieder eine Datei für ein mögliches Tippspiel zur Verfügung.

Excelblog_WM2022_Tippspiel

Zurzeit sind fünf Tipp-Spieler eingetragen. Um weitere Teilnehmer hinzuzufügen, kannst Du einfach die komplette Spalte eines Spielers kopieren und nebenan einfügen. Dasselbe gilt für die "Punkteübersicht", wo Du dann die erzielten Punkte pro Spiel siehst. Ich empfehle Dir, einen Spieler in der Mitte (beispielsweise "Max") zu kopieren, damit die Trennlinien korrekt bestehen bleiben. Auch die Formel "RANG" zu unterst wird sich somit auf den korrekten Bereich beziehen. Falls Du Personen entfernen möchtest, kannst Du ganz einfach komplette Spalten löschen.

Ein potentielles Fehlerrisiko besteht in der Datei: Sollte ein Team mehr als 9 Tore erzielen, können die Tipps nicht richtig abgestimmt werden - in diesem Sonderfall müsstest Du für dieses Spiel die Punkte manuell verteilen. Die Summe- und Rang-Formeln zu unterst werden davon nicht betroffen sein.

Ich wünsche Dir bereits jetzt viel Spass & erfolgreiche Tipps!

Zellen mit Hyperlinks erkennen und hervorheben

Excel wird für alle erdenklichen Auswertungen und Datenabgleiche verwendet. In diesem Beitrag stelle ich Dir zwei Möglichkeiten vor, um einen Zelleninhalt auf Hyperlinks zu prüfen.

In vorherigen Veröffentlichungen haben wir mit Formeln wie =ZELLE() oder über Wege mit =ZELLE.ZUORDNEN() Inhalte von Zellen interpretiert. Etwas ähnliches wurde mit bedingten Formatierungen aufgezeigt (z.B. zur Einfärbung einer Zeile, basierend auf deren Inhalte).

Ein Hyperlink kann auf zwei Arten in einer Excel-Tabelle hinterlegt werden: Via der Formel =HYPERLINK() oder durch Eingabe einer Websiten-URL. Den ersten Fall könnte mit der Formel "=ISTFORMEL()" überprüft werden und würde "WAHR" retournieren. Das könnte je nach Datengrundlage für den Auswertungszweck bereits ausreichen. Falls es sich jedoch um einen einfachen Eintrag handelt oder die Datei andere Formeln und Angaben beinhaltet, reicht dieser Ansatz nicht aus. Zur Orientierung habe ich hier eine kleine Beispieltabelle mit unterschiedlichen Fällen:

ZellenMitHyperlinks

Die Spalte A beinhaltet diverse Varianten:

  • Reguläre Texte (Titel), Zellen A2, A5 und A8;
  • Links auf Websiten (ohne Formel "HYPERLINK"!), Zellen A3, A6 und A9;
  • Mittels Formel "=HYPERLINK()" hinterlegter Link, Zelle A4;
  • fälschlicherweise als Link formatierter Text, Zelle A7.

Auslesen von Hyperlinks via Makro (VBA)

Um die eingetragenen Hyperlinks zu identifizieren, benötigen wir Makrounterstützung. In einer For-Each-Schleife gehen wir durch jede Zelle durch; ohne die Tabelle dynamisch (d.h. bei mehr oder weniger Zeileninhalten direkt zu reagieren), setzen wir:

For i = 2 To 9
[Weiterer Code folgt sogleich...]
Next

Damit durchläuft unsere Prozedur die Zeilen 2 bis 9. Innerhalb der For-Each-Schleife prüfen wir, ob (und wie viele) Hyperlinks die aktuelle Zelle der Spalte A (Spalten-Nummer 1) beinhaltet. Dazu verwenden wir:

For i = 2 To 9

If Cells(i, 1).Hyperlinks.Count = 1 Then
Cells(i, 3) = "LINK!"
End If

Next

Sollte also ein Hyperlink in der entsprechenden Zelle eingetragen worden sein, trägt das Makro in Spalte C den Hinweis "LINK!" ein. Der "Count" müsste im Falle eines Links immer 1 ergeben, weshalb die If-Prüfung das gewünschte Resultat liefert. Ich kann mir keinen Fall vorstellen, bei dem mehrere Hyperlinks in der Zelle enthalten sein sollten; ansonsten wäre die Prüfung "[...].Hyperlinks.Count >= 1 Then" sicherer.