我正在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