2016-05-16 12 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 
しかし、このコードにはないが、あなたの時間を事前に

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 

感謝を(何も出力&結果が他人のために間違っているためにB21で表示されません) elp & time

+0

'.Range(「B2:B6」)する必要があります'「'.Range(なりますが、特に3の範囲0内の特定の値を除外したい場合を除き、私はへの再書き込みSELECT文を示唆していますB7:B16 ")' –

+0

これは正しい範囲ではありません。元々編集された質問で間違っていました。 – Lilou

+0

あなたの編集したコード[私のために働く](http://i.stack.imgur.com/S4zwf.jpg)。あなたの細胞にはどのような価値がありますか? (いくつかのデータをコピー/貼り付けできますか?)あなたが 'i'セルで相殺しているので、' B21'の値を返すことは決してないでしょう。 – BruceWayne

答えて

1

Excelで倍精度数学のIEEE標準が使用されており、小数点以下の値を使用しているために、「マージン」の結果(基本的に丸め誤差)の問題が発生していると思われます。あなたが書いたものでは、特定の価値が決して現れないかもしれません。

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

すごくうれしくあります。最後の質問ですが、セルが空の場合、結果は空ではなく1つのセルになるように句を追加するにはどうすればよいですか?私はCase Else result = ""を試してみましたが、うまくいきません。どうすればいいのかわかりません。 – Lilou

+0

私はまた "" Exit Subを試しましたが、それはちょうど私に0の値を与えます、私は値を必要としません。 – Lilou

+0

@Lilou問題を再現できません。 'Case Is> 0'文の後に' Case Else:result = "" 'を追加すると、テストされたセルが空の場合に空のセルが返されます。より多くの文脈を提供する必要があります。 –