ワークシート関数のMATCH関数は、第1引数・検査値に指定されたデータを、第2引数・検査範囲に指定されたセル範囲や配列から検索して、何番目に存在するかを返す関数です。
このMATCH関数を、Excel VBA(Visual Basic for Applications)から利用して、該当データが見つからなかったときの、
「実行時エラー '1004' WorksheetFunctionクラスのMatchプロパティを取得できません。」
という実行時エラーを回避する方法を探す方は少なくないようです。
「vba match関数 エラー 回避」
「2013 マクロ match エラー 回避」
「vba match 一致する値がなく 実効値エラーが出た」
といった検索キーワードで、このサイト・インストラクターのネタ帳へのアクセスが時折あります。
On Error Resume Next文を使ったマクロと、On Error GoTo文を使ったマクロをご紹介しておきます。
On Error Resume NextでWorksheetFunction.Matchのエラーを回避する
まずOn Error Resume Next文を使ってエラー回避するサンプルマクロです。
Const KEY = "abc"
Dim n As Long: n = 0
On Error Resume Next
n = WorksheetFunction.Match(KEY, Range("A1:A100"), 0)
On Error GoTo 0
MsgBox "『" & KEY & "』は見つかりませんでした。"
Else
MsgBox n
End If
End Sub
On Error Resume Next文で実行時エラーを無視して処理を継続しておいて、
On Error Resume Next
n = WorksheetFunction.Match(KEY, Range("A1:A100"), 0)
On Error GoTo 0
WorksheetFunction.Matchの戻り値が、初期状態のままかどうかをチェックしています。
If n = 0 Then
VBAでLongの初期値は、そもそも「0」ですが、明確にするために初期化処理を明示しています。
Dim n As Long: n = 0
On Error Resume Next文で、以下のようにErrObjectオブジェクトを使ったエラー回避もできますが、
On Error Resume Next
n = WorksheetFunction.Match(KEY, Range("A1:A100"), 0)
If Err.Number <> 0 Then
この考え方なら、次にご紹介するOn Error GoTo文を使うほうが良さそうに感じます。
On Error GoToでWorksheetFunction.Matchのエラーを回避する
On Error GoTo文を使う場合は以下のとおりです。
Const KEY = "abc"
On Error GoTo ErrHandl
Dim n As Long
n = WorksheetFunction.Match(KEY, Range("A1:A100"), 0)
MsgBox n
Exit Sub
Select Case Err.Number
Case 1004
MsgBox "『" & KEY & "』は見つかりませんでした。"
Case Else
MsgBox "エラーが発生しました。"
End Select
Err.Clear
End Sub
WorksheetFunction.Matchのエラートラップだけなら、
Select Case Err.Number
Case 1004
MsgBox "『" & KEY & "』は見つかりませんでした。"
でOKですが、この方法を選択する場合、他のエラーにも対応する可能性が高いでしょうから、
Case Else
MsgBox "エラーが発生しました。"
という処理も入れています。
最終更新日時:2019-12-20 06:28
- Newer:自分でもマクロが出来るようになるのではと思えた
- Older:個々のセルを表すRangeと行を表すRange
Home » エクセルマクロ・Excel VBAの使い方 » WorksheetFunction » VBAからMATCH関数利用時にエラーを回避する