2016-05-16 2 views
0

Итак, я пытаюсь получить свой макрос для анализа некоторых данных для меня на листе. Данные относятся к ячейкам B2-B6 и представляют собой числа от 0 до 4 (десятичные числа).Выберите случай неправильный Результат

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

Этот код работает:

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

i = 0 

With Sheets("Vertical") 
    For Each Rng In .Range("B7:B16") 
     score = Rng.Value 
     Select Case score 
      Case Is >= 0.15 
       result = "1" 
      Case 0.11 To 0.14 
       result = "0.6" 
      Case 0.08 To 0.1 
       result = "0.3" 
      Case Is <= 0.07 
       result = "0" 
     End Select 
     .Range("B26").Offset(i).Value = result 
     i = i + 1 
    Next Rng 
End With 
End Sub 

Но этот код не (ничего не появляется в В21 для выхода & результатов неправы для других)

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

i = 0 

With Sheets("Vertical") 
    For Each Rng In .Range("B2:B6") 
     score = Rng.Value 
     Select Case score 
      Case Is >= 3 
       result = "0" 
      Case 2.99 To 2.6 
       result = "0.3" 
      Case 2.59 To 2.09 
       result = "0.6" 
      Case Is <= 2 
       result = "1" 
     End Select 
     .Range("B21").Offset(i).Value = result 
     i = i + 1 
    Next Rng 
End With 
End Sub 

Спасибо заранее для вас r help & время

+0

Если '.Range («B2: B6»)' 'быть .Range (» B7: B16 ")' –

+0

Нет, это правильный диапазон, он ошибочно изначально в вопросе, отредактированном сейчас. – Lilou

+0

Ваш отредактированный код [работает для меня] (http://i.stack.imgur.com/S4zwf.jpg). Какие значения имеют ваши ячейки? (Можете ли вы скопировать/вставить некоторые данные)? Обратите внимание, что он, скорее всего, никогда не вернет значение в 'B21', так как вы компенсируете ячейки' i'. – BruceWayne

ответ

1

Я подозреваю, что вы столкнулись с проблемами с результатами «на границе» (по сути, ошибки округления) из-за того, что Excel использует стандарт IEEE для математики с двойной точностью и вы используете десятичные значения. С тем, что вы написали, некоторые ценности могут даже не появиться. Если вы не хотите, чтобы специально исключить определенные значения в диапазоне от 0 до 3, я хотел бы предложить переписывание селектов заявление:

Select Case score 
     Case Is >= 3 
      result = "0" 
     Case Is >= 2.6 
      result = "0.3" 
     Case Is > 2 
      result = "0.6" 
     Case Is > 0 'Or Case Else 
      result = "1" 
    End Select 
+0

Это отлично работает. Последний вопрос: как добавить предложение так, чтобы, если ячейка пуста, результат не один, а пустая ячейка? Я пробовал Case Else result = "", но это не работает, и я не уверен, как это сделать. – Lilou

+0

Я также попытался выполнить случай «Exit Sub», но это просто дает мне значение 0, мне не нужна ценность. – Lilou

+0

@ Lilou Я не могу воспроизвести вашу проблему. Добавление 'Case Else: result =" "' после выражения 'Case Is> 0' приводит к возврату пустой ячейки, если тестируемая ячейка пуста. Вам нужно будет предоставить больше контекста. –

Смежные вопросы