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 中的值或处理平均值、平均值、总和等。 如果 Q1 有“.3”而 Q2 有“.99”会发生什么?在这种情况下你的潜艇应该做什么?这就是出现不匹配错误的原因。 @Jeeped 很高兴知道! @findwindow - 通常将一系列单元格的值加载到变体数组中。 【参考方案1】:

您需要在范围上进行迭代

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 选择案例类型不匹配错误的主要内容,如果未能解决你的问题,请参考以下文章

VBA for Excel - 如果更深的选择案例不匹配标准,请再次避免输入代码

基于多变量的 VBA 案例选择

Excel VBA结束选择没有选择案例

模式匹配案例中的统一

如何获得“选择案例以测试范围内的每个单元格?

选择不运行每个案例的案例