VBAでVLOOKUPを使う

Pocket

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」以外の値になるので、これで判定できます。

関連記事

[ 2014年2月17日 | カテゴリー: Excel | タグ: , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報