はじめに
VBAでMATCH関数(WorksheetFunction.Matchメソッド)を使った際に発生したエラーについて、対応方法をまとめます。
MATCH関数がエラーを返す
ワークシート上
ワークシート上でMATCH関数を、第3引数(照合の種類)= 0(完全一致)、の設定で使った時、検査値が検査範囲の中に見つからないと、MATCH関数はエラー(#N/A)を返します。
VBAでは
VBAでWorksheetFunction.Matchメソッドを同じように使用した場合、
「実行時エラー:1004
WorksheetFunction クラスの Match プロパティを取得できません。」
という内容のエラーが発生し、プログラムの実行が中断されてしまいます。
エラーへの対応方法
このエラーの対応には、2段階の処理があります。
①On Error ステートメントで、プログラムを中断せずに実行を続ける
実行時エラーによりプログラムの実行自体が中断されてしまうので、中断されないようにエラー処理ルーチンを記述しておく必要があります。
②検査値が見つからなかった場合に実行する処理を用意しておく
検査値が検査範囲の中に見つからなかった場合、WorksheetFunction.Matchメソッドは数値の0を返します。
If~End Ifステートメントで条件に「Matchメソッドの返し値=0」を設定し、検査値が見つからなかった場合に実行する処理を記述しておきます。
Option Explicit
Sub MATCH関数テストマクロ()
Dim result As Long 'MATCH関数の戻り値
On Error Resume Next '①実行時エラーが発生しても中断せずに続ける
result = Application.WorksheetFunction.Match("X", Range("B2:B6"), 0)
'②検査値が検査範囲の中に見つからなかった場合に実行する処理
If result = 0 Then 'エラーの場合、WorksheetFunction.Matchメソッドは
'数値の0を返す
'処理内容
End If
Err.Clear
On Error GoTo 0
End Sub
おわりに
WorksheetFunction.Matchメソッドで検査値が検査範囲の中に見つからなかった場合のエラーの対応には、実行時エラーに対するエラー処理ルーチンと、検査値が見つからなかった場合に実行する処理を用意しておくという、2段階の対応が必要です。