0

我需要知道长度为 B 的 A 类汽车是否在其适当的长度范围内。我想通过 VBA 在一个表中查找它的类,该表具有每个类的最大和最小长度值。我的代码,其中第 23 列=长度,第 16 列=类,第 101 列=返回它是否不在正确的范围内。

Dim ClassCodeTable As Range
Set ClassCodeTable = Worksheets("Class Code Tables").Range("A:G")

Range("A1").Select
Lastrow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To Lastrow
If Cells(i, 23).Value > Application.WorksheetFunction.VLookup(Cells(i, 16), ClassCodeTable, 3, False) And Cells(i, 23).Value < Application.WorksheetFunction.VLookup(Cells(i, 16), ClassCodeTable, 4, False) Then
    Cells(i, 101).Value = ""
    Else
    Cells(i, 101).Value = "Length Range Error"
End If
Next

此代码返回 1004 错误,无法获取 WorksheetFunction 类的 VLookup 属性。但是当我用 VLookup 查找具有特征 C 的 A 类中的汽车是否等于ClassCodeTable 中 A 类的预期分类值时,这种方法有效。在我看来,返回的 VLookup 值并未存储为数字,即使查找表中的所有值都是数字。

有没有办法将 VLookup 值转换为可以检查不等式的数字?

4

1 回答 1

1

这是做同样事情的另一种方法,不需要循环。我根据您描述的设置对其进行了测试,它为我成功运行:

Sub tgr()

    With Range("CW2:CW" & Cells(Rows.Count, "P").End(xlUp).Row)
        .Formula = "=IF(COUNTIF('Class Code Tables'!A:A,P2)=0,""Class not found""," & _
                       "IF(AND(W2>=VLOOKUP(P2,'Class Code Tables'!A:G,3,FALSE)," & _
                              "W2<=VLOOKUP(P2,'Class Code Tables'!A:G,4,FALSE))," & _
                           """"",""Length Range Error""))"
        .Value = .Value
    End With

End Sub

或者,如果您希望将公式全部放在一行中:

        .Formula = "=IF(COUNTIF('Class Code Tables'!A:A,P2)=0,""Class not found"",IF(AND(W2>=VLOOKUP(P2,'Class Code Tables'!A:G,3,FALSE),W2<=VLOOKUP(P2,'Class Code Tables'!A:G,4,FALSE)),"""",""Length Range Error""))"
于 2015-09-04T20:10:40.327 回答