0

クラス A で長さ B の車が適切な長さの範囲内にあるかどうかを知りたいのですが。VBA を使用して、各クラスの最大長と最小長の値を持つテーブル内のクラスを VLookup したい。私のコードでは、列 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 プロパティを取得できません。しかし、このアプローチは、特性 C を持つクラス A の車が ClassCodeTable のクラス Aの期待されるカテゴリ値に等しいかどうかを VLookup するときに機能します。ルックアップ テーブルのすべての値が数値であるにもかかわらず、返された 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

または、式をすべて 1 行にまとめたい場合は、次のようにします。

        .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 に答える