2016-05-16 50 views
1

虽然我已经编写了一些其他的东西,但我对VBA Excel相对较新。 我想交叉比较1和0之间的一列数字,称为分数,结果可以是取决于数值的4之一。然而,无论我如何编码(我试过只使用“To”或只有“<> =”),我只能得到相同的结果(1),但没有任何效果。我似乎也无法让它通过我的专栏工作,一次只能在一个单元中进行(每当我将范围扩展到“B2:B7”时,它都会给我一个不匹配的错误)。 ,它实际上给我,我在寻找,并通过一列或细胞作用的结果Select Case wrong output&Mismatch error

谢谢您的时间

下面是代码:

Sub Vertical_Analysis() 

    Sheets("Vertical").Select 

    Dim score As Integer 
    score = Range("B2").Value 

    Dim result As String 
    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("B21").Value = result 

End Sub 
+1

你需要一个循环。 – findwindow

+1

您只获得第一个的原因是您将分数声明为整数。它需要被声明为一个双'昏暗的分数双# –

+0

非常感谢你,我非常确定这是一个简单的修复。 – Lilou

回答

3

首先score需要一个双倍不是整数。

然后循环使用For Each。

最后一部分.Range("B21").Offset(i).Value = result将每个结果向下移动一行,以便它们不会相互替换。

试试这个:

Sub Vertical_Analysis() 

    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:B7") 
      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("B21").Offset(i).Value = result 
      i = i + 1 
     Next Rng 
    End With 
End Sub 
+0

真棒谢谢你works.What我会改变,以适用于三列B2:B7 C2:C7和D2:D7?我尝试复制粘贴并用范围(“C2:C7”)和.Range(“C21”)替换Range(“B2:B7”)。Offset(i).Value = result,但结果输入为C26向下 – Lilou

+0

@Lilou请点击答案旁的复选标记以标记为正确无误。这是唯一可以做的事情,并将这个问题标记为正在回答。 –

+0

其实我刚创建了一个新的宏,像梦一样工作,谢谢。 – Lilou