VBA: Select Case

Die bessere If-Funktion

Von: Lorenz Hölscher
Stand: 4. Mai 2011
Anmelden um Kommentare zu schreiben

Downloads zu diesem Beitrag

Über den Autor: Lorenz Hölscher

bild80517

Lorenz Hölscher ist freiberuflicher Dozent, Berater und Programmierer mit Schwerpunkt Anwendungs-Programmierung. Vorrangig widmet er sich Access, Word und Excel sowie begleitenden grafischen Arbeiten. Er legt viel Wert auf benutzerfreundliche Oberflächen und ordentliches Design in Optik und Programmierung. Zu Hilfe kommen ihm da seine langjährigen "branchenfremden" Erfahrungen als Architekt, Layouter und Designer.

Lorenz Hölscher bietet eigene Hilfeseiten an und hat bei Microsoft Press mehrere Bücher veröffentlicht zu Access 2007, Access 2007 VBA, Word 2007 VBA und Access 2010.

Beiträge des Autors als Atom-Feed Atom-Feed: Neues von akademie.de

Statt einer komplizierten If-Then-Else-Struktur können Sie Ihre VBA-Programme meistens mit einem übersichtlicheren Select Case schreiben. Lorenz Hölscher zeigt Ihnen, wie Sie Ihren Code damit optimieren.

So ziemlich die erste Struktur, die Sie in einem VBA-Programm eingesetzt haben, dürfte ein If Then Else gewesen sein. Und wahrscheinlich sind Sie auch dabei geblieben. Das ist schade, denn oft geht es besser als mit If(). Wenn Sie so etwas programmieren wie

Function Quartal(datWert As Date) As Integer
	Dim intMonat As Integer
	intMonat = Month(datWert)

	If intMonat = 1 Or IntMonat = 2 Or IntMonat = 3 Then
		Quartal = 1
	ElseIf intMonat = 4 Or IntMonat = 5 Or IntMonat = 6 Then
		Quartal = 2
	ElseIf intMonat = 7 Or IntMonat = 8 Or IntMonat = 9 Then
		Quartal = 3
	ElseIf intMonat = 10 Or IntMonat = 11 Or IntMonat = 12 Then
		Quartal = 4
	End If
End Function

Dann lässt sich das mit einer Select Case-Strukur direkt viel kürzer formulieren:

Function Quartal(datWert As Date) As Integer
	Select Case Month(datWert)
	Case 1, 2, 3:	Quartal = 1
	Case 4 to 6:	Quartal = 2
	Case 7 to 9:	Quartal = 3
	Case Is > 9 And Is <= 12:	Quartal = 4
	Case 13:		MsgBox "Das kann ja wohl nicht sein!"
	Case Else
		MsgBox "Dieser Fall tritt auch nicht ein."
	End Select
End Function

Wie Sie bemerkt haben, darf hinter einem Case wie bei Case 13 ein einzelner Wert stehen. Um ein Or aus der If-Konstruktion abzubilden, dürfen wie bei Case 1, 2, 3 auch mehrere Werte nacheinander durch Komma getrennt stehen.

In diesem Fall sind es sowieso aufeinander folgende Zahlen. Daher können Sie wie bei Case 4 to 6 auch direkt einen Zahlenbereich nennen. Beide Methoden dürfen wie bei Case 10, 14 to 20, 30 auch gemischt werden.

Für den Größer/Kleiner-Vergleich gibt es die reservierte Variable Is (die nicht als Operator wie If x Is Nothing missverstanden werden darf), wie Sie im Beispiel Case Is > 9 And Is <= 12 sehen.

Diese Seite ist für Mitglieder von akademie.de reserviert.

Möchten Sie die Mitgliedschaft 14 Tage kostenlos testen und den Beitrag komplett lesen?

Ich bin bereits Mitglied
Jetzt Probemitglied werden
Ich kann in den 14 Tagen Probezeit formlos z.B. per E-Mail stornieren. Wenn ich das nicht tue, entscheide ich mich für ein