Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Select Case+Numeric

Select Case+Numeric
04.08.2006 08:35:49
SteffenS
Guten morgen an alle,
wie kann ich in einer Select Case Abfrage, abfragen ob es sich bei dem Wert um eine Zahl handelt.
Mein Versuch:
Select Case Target.Value
Case IsNumeric(Target.Value) = True
End Select
Funktioniert leider nicht
MFG
Steffen Schmerler
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Select Case+Numeric
04.08.2006 08:40:29
Dr.
Hi,
z.B. so:
Select Case IsNumeric(Target.Value)
Case Is = True
MsgBox "Zahl"
Case Is = False
MsgBox "keine Zahl"
End Select
noch eine Frage
04.08.2006 09:08:22
SteffenS
Meine Abfrage sieht im Detail so aus:
Select Case Target.Value
Case "U", "u"
'Target.Value = UCase(Target.Value)
With Target
.Interior.ColorIndex = 5
.Font.ColorIndex = 2
.HorizontalAlignment = xlCenter
End With
Case "S", "s"
Target.Value = UCase(Target.Value)
With Target
.Interior.ColorIndex = 4
.Font.ColorIndex = 1
.HorizontalAlignment = xlCenter
End With
Case "K", "s"
Target.Value = UCase(Target.Value)
With Target
.Interior.ColorIndex = 3
.Font.ColorIndex = 2
.HorizontalAlignment = xlCenter
End With
Case "V", "v"
Target.Value = UCase(Target.Value)
With Target
.Interior.ColorIndex = 6
.Font.ColorIndex = 1
.HorizontalAlignment = xlCenter
End With
Case IsNumeric(Target.Value) = True
'Fehlermeldung
MsgBox ("Der eingebene Wert ist ungültig.")
Target.ClearContents
Case Else
With Target
.Font.ColorIndex = 1
.HorizontalAlignment = xlRight
End With
If Target.Row Mod 2 0 Then
Target.Interior.ColorIndex = xlNone
Else
Target.Interior.ColorIndex = 15
End If
End Select
Wie kann ich das numeric abfragen ohne es beim Select Case zu hinterlegen?
Danke nochmals
Steffen Schmerler
Anzeige
AW: noch eine Frage
04.08.2006 09:35:12
Heiko
Hallo Steffen,
das würde so in der Art machen:

Private Sub Worksheet_Change(ByVal Target As Range)
' Wenn es wirklich, wie hier in meinem Beispiel auf Change reagieren soll dann
' die Events abschalten sonst ist es eine Endlosschleife.
Application.EnableEvents = False
With Target
If IsNumeric(.Value) = False Then
Select Case UCase(Target.Value)
Case "U"
.Value = UCase(Target.Value)
.Interior.ColorIndex = 5
.Font.ColorIndex = 2
.HorizontalAlignment = xlCenter
Case "S"
.Value = UCase(Target.Value)
.Interior.ColorIndex = 4
.Font.ColorIndex = 1
.HorizontalAlignment = xlCenter
Case "K"
.Value = UCase(Target.Value)
.Interior.ColorIndex = 3
.Font.ColorIndex = 2
.HorizontalAlignment = xlCenter
Case "V"
.Value = UCase(Target.Value)
.Interior.ColorIndex = 6
.Font.ColorIndex = 1
.HorizontalAlignment = xlCenter
Case Else
.Font.ColorIndex = 1
.HorizontalAlignment = xlRight
If .Row Mod 2 <> 0 Then
.Interior.ColorIndex = xlNone
Else
.Interior.ColorIndex = 15
End If
End Select
Else
MsgBox ("Der eingebene Wert ist ungültig.")
.ClearContents
End If
End With
Application.EnableEvents = True
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
Nachtrag
04.08.2006 09:39:38
Heiko
Hallo,
na wenn schon dann richtig ;-)

Private Sub Worksheet_Change(ByVal Target As Range)
' Wenn es wirklich, wie hier in meinem Beispiel auf Change reagieren soll dann
' die Events abschalten sonst ist es eine Endlosschleife.
Application.EnableEvents = False
With Target
If IsNumeric(.Value) = False Then
Select Case UCase(.Value)
Case "U"
.Value = UCase(.Value)
.Interior.ColorIndex = 5
.Font.ColorIndex = 2
.HorizontalAlignment = xlCenter
Case "S"
.Value = UCase(.Value)
.Interior.ColorIndex = 4
.Font.ColorIndex = 1
.HorizontalAlignment = xlCenter
Case "K"
.Value = UCase(.Value)
.Interior.ColorIndex = 3
.Font.ColorIndex = 2
.HorizontalAlignment = xlCenter
Case "V"
.Value = UCase(.Value)
.Interior.ColorIndex = 6
.Font.ColorIndex = 1
.HorizontalAlignment = xlCenter
Case Else
.Font.ColorIndex = 1
.HorizontalAlignment = xlRight
If .Row Mod 2 <> 0 Then
.Interior.ColorIndex = xlNone
Else
.Interior.ColorIndex = 15
End If
End Select
Else
MsgBox ("Der eingebene Wert ist ungültig.")
.ClearContents
End If
End With
Application.EnableEvents = True
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Select Case und Zahlen abfragen in Excel VBA


Schritt-für-Schritt-Anleitung

Um in VBA eine Select Case-Anweisung zu nutzen, die überprüft, ob ein Wert eine Zahl ist, kannst du folgende Schritte befolgen:

  1. Öffne den VBA-Editor in Excel (Alt + F11).
  2. Füge ein neues Modul hinzu oder wähle ein bestehendes aus.
  3. Erstelle eine Private Sub-Prozedur, die auf Änderungen in einem bestimmten Bereich reagiert.

Hier ist ein einfaches Beispiel für die Implementierung einer Select Case-Anweisung, die die IsNumeric-Funktion verwendet:

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    With Target
        If IsNumeric(.Value) Then
            Select Case .Value
                Case 1
                    MsgBox "Die Zahl ist 1"
                Case 2
                    MsgBox "Die Zahl ist 2"
                Case Else
                    MsgBox "Eine andere Zahl"
            End Select
        Else
            MsgBox "Keine gültige Zahl"
            .ClearContents
        End If
    End With
    Application.EnableEvents = True
End Sub

Häufige Fehler und Lösungen

Fehler 1: Select Case Target.Value wird verwendet, ohne IsNumeric zu überprüfen.

Lösung: Stelle sicher, dass du zuerst prüfst, ob der Wert numerisch ist, bevor du die Select Case-Anweisung ausführst, wie im obigen Beispiel gezeigt.

Fehler 2: Verwendung von Case IsNumeric(Target.Value) = True, was nicht korrekt ist.

Lösung: Verwende einfach If IsNumeric(Target.Value) anstelle von Select Case für die numerische Überprüfung.


Alternative Methoden

Eine alternative Methode zur Verwendung von Select Case für numerische Werte ist die Verwendung von If...ElseIf-Anweisungen:

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    With Target
        If IsNumeric(.Value) Then
            If .Value = 1 Then
                MsgBox "Die Zahl ist 1"
            ElseIf .Value = 2 Then
                MsgBox "Die Zahl ist 2"
            Else
                MsgBox "Eine andere Zahl"
            End If
        Else
            MsgBox "Keine gültige Zahl"
            .ClearContents
        End If
    End With
    Application.EnableEvents = True
End Sub

Diese Methode ist besonders nützlich, wenn du komplexere Bedingungen hast.


Praktische Beispiele

Hier ist ein praktisches Beispiel, das die Verwendung von IsNumeric in einer Select Case-Anweisung zeigt:

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    With Target
        If IsNumeric(.Value) Then
            Select Case .Value
                Case 10
                    MsgBox "Zahl ist zehn"
                Case 20
                    MsgBox "Zahl ist zwanzig"
                Case Else
                    MsgBox "Eine andere Zahl"
            End Select
        Else
            MsgBox "Ungültiger Wert"
            .ClearContents
        End If
    End With
    Application.EnableEvents = True
End Sub

In diesem Beispiel wird der Wert überprüft, und je nach Eingabe erhält der Benutzer eine entsprechende Rückmeldung.


Tipps für Profis

  • Um Endlosschleifen zu vermeiden, schalte Application.EnableEvents auf False, bevor du Änderungen vornimmst, und setze es danach wieder auf True.
  • Nutze die UCase- oder LCase-Funktionen, um die Groß- und Kleinschreibung zu ignorieren, wenn du Text überprüfst.
  • Bei der Verwendung von Select Case in Excel VBA kannst du auch mehrere Bedingungen in einem Case kombinieren, z.B. Case 1, 2, 3 für mehrere mögliche Werte.

FAQ: Häufige Fragen

1. Frage: Wie kann ich mehrere Werte in einem Select Case abfragen?

Antwort: Du kannst mehrere Werte in einem Case angeben, indem du sie durch Kommas trennst, z.B. Case "U", "u".

2. Frage: Was ist der Unterschied zwischen Select Case und If...ElseIf?

Antwort: Select Case ist oft einfacher zu lesen, wenn du viele Bedingungen hast. If...ElseIf ist flexibler und eignet sich besser für komplexere Logik.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige