VBAでVLOOKUPを使う

Excelのマクロで、ある番号に合致した行の値を返す処理が必要になりました。

まず思い付いたのが最初の行から1行ずつチェックをする方法。
これだと行が多いと処理時間がかかります。
次に思い付いたのが「Find」を使う方法。
これだとさほど時間がかかりません。

その後、「VBAはワークシート関数が使える(ことがある)。VLOOKUPを使えないか?」と思い付いたので試してみました。

X A B
1 番号
2 1 63
3 3 38
4 5 22
5 7 86
6 9 16

上の表の「番号」列に合致する「値」列の値を返す関数です。

Sub test1()
    result = Application.WorksheetFunction.VLookup(5, Sheets("Sheet1").Range("A2:B6"), 2, False)
    MsgBox result
End Sub

「Application.WorksheetFunction.VLookup」とするとVLOOKUPが使えます。
範囲は「Sheets(“Sheet1”).Range(“A2:B11”)」のように指定します。
他はワークシート関数としての使い方と同じです。

通常はこのような使い方でいいのですが、問題は合致する番号がない場合、エラーになって処理が止まってしまうケースです。
合致しない場合は「該当なし」と返すようにします。

Sub test2()
    On Error Resume Next
    result = Application.WorksheetFunction.VLookup(10, Sheets("Sheet1").Range("A2:B11"), 2, False)
    If Err <> 0 Then
        result = "該当なし"
    End If
    MsgBox result
End Sub

「On Error Resume Next」を使うとエラーが起きても処理が続きます。
エラーが起きると「Err」が「0」以外の値になるので、これで判定できます。

コメント

タイトルとURLをコピーしました