2016-05-16 77 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