2016-05-16 64 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 =“”'会导致返回一个空单元格。您需要提供更多的上下文。 –