2016-05-17 14 views
0

So habe ich einen Code für eine ausgewählte Fallschleife um eine Reihe von Zellen mit Dezimalwerten, die unterschiedliche Ergebnisse abhängig von dem Wert der Eingabezelle geben. Ich versuche eine Klausel hinzuzufügen, so dass das Ergebnis auch leer ist, wenn eine der Eingabezellen leer ist.Wählen Sie Case VBA leere Zelle

Dies ist mein Code:

Sub JEeldepthoutlet() 
    Dim score As Double, result As String 
    Dim Rng As Range, i As Long 

i = 0 

With Sheets("Velocity_Depth") 
    For Each Rng In .Range("B12:B16") 
     score = Rng.Value 
     Select Case score 
    Case Is >= 0.05 
     result = "1" 
    Case Is >= 0.031 
     result = "0.6" 
    Case Is >= 0.021 
     result = "0.3" 
    Case Is >= 0 
     result = "0" 
     End Select 
     .Range("Q31").Offset(i).Value = result 
     i = i + 1 
    Next Rng 
End With 
End Sub 

Ich habe versucht, die beiden folgenden Optionen hinzufügen, von denen keines gearbeitet:

Case Else 
result "" 

Dies gab mir nur ein Ergebnis von 0, wenn es eine leere Zelle

ich habe auch versucht

Case "" 
Exit Sub 

Dies gab mir auch ein Ergebnis von 0.

Hat jemand irgendwelche Ideen? Vielen Dank im Voraus

Antwort

1

Verwenden Sie einen Variant:

Sub JEeldepthoutlet() 
    Dim score As Variant, result As String 
    Dim Rng As Range, i As Long 

    i = 0 

    With Sheets("Velocity_Depth") 
     For Each Rng In .Range("B12:B16") 
      score = Rng.Value 
       Select Case score 
        Case Is = "" 
         result = "" 
        Case Is >= 0.05 
         result = "1" 
        Case Is >= 0.031 
         result = "0.6" 
        Case Is >= 0.021 
         result = "0.3" 
        Case Is >= 0 
         result = "0" 
       End Select 
      .Range("Q31").Offset(i).Value = result 
      i = i + 1 
     Next Rng 
    End With 
End Sub 
1

Wickeln Sie das ganze Select Fall in einer If-Anweisung:

Sub JEeldepthoutlet() 
Dim score As Double, result As String 
Dim Rng As Range, i As Long 

i = 0 

With Sheets("Velocity_Depth") 
    For Each Rng In .Range("B12:B16") 
     score = Rng.Value 
     If score <> "" Then 
      Select Case score 
       Case Is >= 0.05 
        result = "1" 
       Case Is >= 0.031 
        result = "0.6" 
       Case Is >= 0.021 
        result = "0.3" 
       Case Is >= 0 
        result = "0" 
      End Select 
     Else 
      result = "" 
     End If 
     .Range("Q31").Offset(i).Value = result 
     i = i + 1 
    Next Rng 
End With 
End Sub 
+0

Es kommt zu einem Typ Mismatch Fehler, wenn ich das tue, aber ich änderte den Score zu "Variant" und es hat perfekt funktioniert. Danke für Ihre Hilfe. Scott, ich versuche, mir VBA für dieses Arbeitsprojekt beizubringen. – Lilou

+0

@Lilou Geben Sie Gary'sStudent die richtige Antwort und verwenden Sie seine. –

0

Wenn Sie eine leere Zelle in eine numerische Variable speichern sie gespeichert ist wie 0.

Um zu vermeiden, dass ich eine if-Anweisung vor dem Select Case

hinzugefügt habe

Für leere Zellen habe ich in allen anderen Fällen, in denen ich den Wert der Zelle zugewiesen habe, einen Wert außerhalb des in der case-Anweisung verwendeten Bereichs zugewiesen. Siehe unten:

If ActiveCell = "" Then 

    score = 101 

Else 

    score = ActiveCell 

End If 

Select Case score 

    Case 0 To 35 
     Mark = "F" 
     Comment = "Terrible - needs attention" 
    Case 36 To 50 
     Mark = "D" 
     Comment = "Needs attention" 
    Case 51 To 65 
     Mark = "C" 
     Comment = "Not bad, could do better" 
    Case 66 To 85 
     Mark = "B" 
     Comment = "Good score" 
    Case 86 To 100 
     Mark = "A" 
     Comment = "EXcelent score - well done!" 
    Case Else 
     Mark = "" 
     Comment = "NO SCORE RECORDED" 

End Select 
Verwandte Themen