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



我正在Excel 2013中处理一个简单的选择案例。 我希望 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

结束子

如果我将其更改为仅选择一个单元格,则以下内容有效(我已经在多个单元格上对其进行了测试,并且它们都分别成功):

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

结束子

显然,我没有正确引用范围。 我也尝试将范围更改为 Q2:Q3 和 R2:R3,但出现相同的错误。 但是,如果我分别引用 Q2 和 Q3,它们会成功运行。

如何正确引用范围? 我已经查看了Ozgrid,MSDN以及SO上的几个线程,但我只是没有成功。

您需要迭代范围

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 本身中会更有效。

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

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

最新更新