2016-05-16 95 views
0

所以我想讓我的宏在一張表中分析一些數據。數據在單元格B2到B6上,數字在0和4之間(小數)。Select Case wrong輸出

我想不出我在做什麼錯誤的代碼,它工作完全正常使用一組不同的在不同細胞的條件下,我圖所示

此代碼:

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 

但是這個代碼不(沒有出現在B21的輸出&結果是錯誤的,其他人)提前

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 

感謝您的H elp &時間

+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語句:

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

我也試過Case「」Exit Sub,但是這只是給我一個值0,我不需要任何價值。 – Lilou

+0

@Lilou我無法重現您的問題。如果被測試的單元格爲空,則在Case'> 0'語句後添加'Case Else:result =「」'會導致返回一個空單元格。您需要提供更多的上下文。 –