【VBA】Match関数でエラーが出る時の対処法
VBAからMatch関数を使用すると画像のエラーが出ることがあります。
これはマッチするデータがないときに起こります。Excelシート上で使う時はN/Aとなるのですが、VBAだとエラーになってしまいます。
今回はこのエラーが出る時の対処法を紹介します。
Match関数でエラーが出る具体例
Sub MatchError()
Dim num As Long
'Kがないのでエラーになる
num = Application.WorksheetFunction.Match("K", Range("A1:A8"), 0)
Debug.Print num
End Sub
例えば上のようにExcelにデータがあるときに、このプログラムを実行するとエラーが起こります。
これはMatch関数が"K"を探しているのに、シート上にKがないためです。
Match関数でエラーが出る時の対処法
Sub MatchNoneError()
On Error Resume Next 'エラーを無視
Dim num As Long
'エラーになるが無視される
num = Application.WorksheetFunction.Match("K", Range("A1:A8"), 0)
If Err.Number > 0 Then num = 0 'エラーがある場合
On Error GoTo 0 'エラーを無視の終了
Debug.Print num
End Sub
エラーを回避するためには、On Error Resume Nextで一旦エラーを無視します。
If Err.Number > 0 Then num = 0 'エラーがある場合
そしてこの部分でエラーとなっていた場合の処理をします。
Err.Numberはエラー番号を返すプロパティで正常ならば0のため、0より大きい=エラーがあったというわけです。
On Error GoTo 0 'エラーを無視の終了
最後にOn Error GoTo 0を書いて再度エラーが生じるように戻します。
これを入れておかないと、この後もエラーを無視したままになります。Match関数以外のエラーはきちんと発生するようにしてバグ防止に努めましょう。
Match関数は直接エラーを回避する方法がないため、このように一度エラーを無視して対処しましょう。