我正在使用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,它们就会成功运行。
答案 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