2016-05-17 3 views
0

Итак, у меня есть код ниже для цикла case case вокруг набора ячеек с десятичными значениями, которые дают разные результаты в зависимости от значения входной ячейки. Я пытаюсь добавить предложение так, чтобы, если одна из входных ячеек пуста, результат также пуст.Select Case VBA пустая ячейка

Это мой код:

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 

Я попытался добавить следующие два варианта, ни один из которых работал:

Case Else 
result "" 

Это просто дал мне результат 0, если существует пустая ячейка

Я также попытался

Case "" 
Exit Sub 

Это также дало мне результат 0.

У кого-нибудь есть идеи? Заранее спасибо

ответ

1

Используйте 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

Wrap весь Выберите случай в операторе If:

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

При возникновении ошибки несоответствия типа, когда я это делаю, но я изменил оценку на «Вариант», и она отлично работала. Благодарим вас за помощь Скотта, я пытаюсь научить себя VBA для этого рабочего проекта. – Lilou

+0

@Lilou Дайте правильный ответ на Gary'sStudent и используйте его. –

0

При сохранении пустую ячейку в числовой переменной она хранится как 0.

Чтобы избежать этого, я добавил инструкцию if перед выбором Case

Для пустой ячейки я назначил значение за пределами диапазона, которое я использовал в инструкции case во всех остальных случаях, я назначил значение ячейки. См. Ниже:

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 
Смежные вопросы