Excel选择案例类型不匹配错误

时间:2016-04-21 16:16:49

标签: excel vba excel-vba

我正在使用Excel 2013中的一个简单的Select Case。我希望R列中的值基于Q列中的值。但是我得到了类型不匹配错误。这是一个缩短版本的案例,因为实际上有20个,但这是我用来测试的(以下是类型不匹配错误):

Sub laranges()
Select Case Range("Q:Q").Value
    Case 0 To 0.49
    Range("R:R").Value= "Low"
    Case 0.5 To 0.99
    Range("R:R").Value= "Medium"
    Case Else
    Range("R:R").Value = "High"
End Select

End Sub

如果我将其更改为仅选择一个单元格(我已经在几个单元格上进行了测试并且它们都是单独成功的),则以下情况有效:

Sub laranges()
Select Case Range("Q2").Value
    Case 0 To 0.49
    Range("R2").Value = "Low"
    Case 0.5 To 0.99
    Range("R2").Value = "Medium"
    Case Else
    Range("R2").Value = "High"
End Select

End Sub

显然我没有正确引用范围。我也尝试将范围更改为Q2:Q3和R2:R3,但我得到了同样的错误。但如果我单独引用Q2和Q3,它们就会成功运行。

如何正确引用范围?我查看了OzgridMSDN,以及SO上的几个主题,但我还没有成功。

2 个答案:

答案 0 :(得分:3)

您需要迭代范围

Sub laranges()
Dim sResult As String
For Each oCell In Range("Q:Q")
    Select oCell.Value
        Case 0 To 0.49
            sResult = "Low"
        Case 0.5 To 0.99
            sResult = "Medium"
        Case Else
            sResult = "High"
    End Select

    oCell.Offset(0, 1).Value = sResult
Next oCell

将这种逻辑放在s / s本身会更有效率。

答案 1 :(得分:1)

你可以尝试这个"公式"方法

Sub main()
' for "Choose" function clever use, see tobriand's answer in http://stackoverflow.com/questions/5488692/case-function-equivalent-in-excel

With ActiveSheet.Range("Q:Q").SpecialCells(xlCellTypeConstants, xlNumbers).Offset(, 1)

    .FormulaR1C1 = "=CHOOSE(   1   +   LOG(1 + (2*AND(RC[-1]>=0,RC[-1]<=0.49) ) + (4*AND(RC[-1]>=0.5,RC[-1]<=0.99)) ,2)," _
                     & "    ""High"" ,                 ""Low"",                          ""Medium"")"
    .Value = .Value

End With

End Sub