WorksheetFunctionによるVLOOKUP関数を使用する際、検索値がない場合などに「プロパティが取得できません」とエラーが出る場合があります。
これらのエラーを回避するには「On Error Resume Next」ステートメントを使用します。このステートメントはマクロ実行時にエラーが発生しても中断せずに次のステートメントから処理を続けることができます。
またWorksheetFunctionを使わずにVLOOKUP関数の数式をセルに直接埋め込むような書き方をしている場合はIFERROR関数を使います。
ここでは「On Error Resume Next」を始めとしたVBAでVLOOKUP関数実行時のエラー回避方法についてまとめます。
関連リンク
「On Error Resume Next」でエラーを回避する方法
WorksheetFunctionによるVLOOKUP関数を使用している場合は「On Error Resume Next」でエラーを回避します。下記コードでは検索値をセルから取得してVLOOKUPで検索する際にエラーが出た場合、「該当なし」と表示させる例です。
Sub vlookupError()
Set Name = Range("D2") '検索値を指定
Set myrange = Range("A:B") '範囲を指定
Set result = Range("E2") '結果を出力するセルを定義
On Error Resume Next 'エラー回避のステートメント
result.Value = Application.WorksheetFunction.VLookup(Name, myrange, 2, False)
If Err.Number <> 0 Then 'エラーナンバーが0以外の場合
result.Value = "該当なし" '結果のセルに「該当なし」と表示
On Error GoTo 0 'エラー回避を解除
End If
End Sub
正常にVLOOKUPで値を取得している様子
上記コードを動かしている様子は下記です。まずは正常にVLOOKUPで値を取得している様子です。検索値である氏名の欄に鈴木と入力し、左の表の鈴木に対する点数の数値を返しており、正常にVLOOKUP関数を実行できるのがわかります。
存在しない検索値を検索する際の様子
次に存在しない検索値を検索する際の様子です。山田という検索値が見つからないので「該当なし」と返されているのがわかります。
コード解説
コードを細かく区切って解説します。
セル「D2」の値を検索値として変数「Name」に格納します。
Set Name = Range("D2")
範囲「A:B」をデータ範囲として変数「myrange」に格納します。ちなみに「A:B」という書き方はA列とB列すべてが範囲として指定されます。
Set myrange = Range("A:B")
セル「E2」を変数「result」として定義します。ここに検索結果を格納します。
Set result = Range("E2")
「On Error Resume Next」ステートメントを定義します。この文以降は「On Error GoTo 0」で解除しない限りはエラーは無視されます。
On Error Resume Next 'エラー回避のステートメント
WorksheetFunctionのVLOOKUP関数を実行し、その結果をresultとして定義したセルに格納します。
result.Value = Application.WorksheetFunction.VLookup(Name, myrange, 2, False)
エラーが出た場合はresultとして定義したセルに「該当なし」と表示します。ここで使っているErr オブジェクトは実行時エラーに関する情報を保有しており、「Err.Number」はエラーコードを指します。ここでは「If Err.Number <> 0 Then」としているので、エラーコードが0以外だった場合にIF文内の処理を実行します。
「On Error GoTo 0」はエラー回避を解除する文です。以降のエラーは通常通り発生します。
If Err.Number <> 0 Then
result.Value = "該当なし"
On Error GoTo 0
End If
補足:Errオブジェクトの関連プロパティ
プロパティ | 説明 |
---|---|
Err.Number | エラー番号です。これが0の場合、エラーは発生していません。 |
Err.Description | エラーの簡単な説明を返します。 |
Err.Source | [プロパティ] ダイアログボックスのプロジェクト名。 |
Err.HelpContext | ヘルプ ファイル内の特定のエラーのコンテキスト ID。 |
Err.HelpFile | ヘルプ ファイルのフォルダの場所とファイル名。 |
Err.LastDllError | DLL または外部ライブラリへの呼び出し (つまり、APi 呼び出し) によって生成されたシステム エラー コード |
VLOOKUP関数の数式をセルに直接埋め込む場合のエラー回避方法
VLOOKUP関数の数式をセルに直接埋め込む場合のエラー回避は下記のように「IFERROR」関数を使用します。下記の例ではセル「E2」に直接「=IFERROR(VLOOKUP(D2,A2:B6,2,FALSE),”該当なし”)」と書き込み、その後、E2の数式を値に変換しています。ここでの注意点としては埋め込む数式内に「”(ダブルコーテーション)」がある場合は「””」と記載する必要があります。下記の例では「””該当なし””」の部分がそれです。
Sub vlookupError()
Range("E2") = "=IFERROR(VLOOKUP(D2,A2:B6,2,FALSE),""該当なし"")" '直接数式を挿入
Range("E2").Value = Range("E2").Value '数式を値に変換
End Sub
ショートカットキーの練習
当サイトはショートカットキーの練習を実際の動きを確認しながら練習できる機能がついています。繰り返し指を動かして練習ができるので、ゲーム感覚で遊んでいくうちに自然とショートカットキーが使えるようになれます。ショートカットキーは暗記するよりも実際に手を動かして練習していったほうが習得が早くなるので、是非当サイトをブックマークに登録し定期的に練習してみてください。下記のSTARTキーを押下すると練習を始められます。
※推奨ブラウザ Google Chrome