Excel 选择案例类型不匹配错误
Posted
技术标签:
【中文标题】Excel 选择案例类型不匹配错误【英文标题】:Excel Select Case Type Mismatch Error 【发布时间】:2016-04-21 16:16:48 【问题描述】:我正在 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
结束子
如果我将其更改为仅选择一个单元格,则以下工作有效(我已经在多个单元格上对其进行了测试,并且它们都单独成功):
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 上的几个线程,但我没有成功。
【问题讨论】:
您不能从超过 1 个单元格中获取value
。
好吧,您实际上可以获取多个单元格的 .Value 或 .Value2 ,但您最终会得到一个无法作为单个值处理的数组。遍历 Q2:Q您需要在范围上进行迭代
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 本身会更有效率。
【讨论】:
FWIW:我会在 Q 列中找到最后一个被占用的单元格,这样它就不会遍历 1M+ 行。但是,是的,这就是问题的要旨。 这正是我需要知道的。效果很好。【参考方案2】:你可以试试这个“公式”方法
Sub main()
' for "Choose" function clever use, see tobriand's answer in http://***.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
【讨论】:
以上是关于Excel 选择案例类型不匹配错误的主要内容,如果未能解决你的问题,请参考以下文章