Home » エクセルマクロ・Excel VBAの使い方 » WorksheetFunction » VBAからMATCH関数利用時にエラーを回避する

VBAからMATCH関数利用時にエラーを回避する

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

ワークシート関数のMATCH関数は、第1引数・検査値に指定されたデータを、第2引数・検査範囲に指定されたセル範囲や配列から検索して、何番目に存在するかを返す関数です。

VBAからMATCH関数利用時にエラーを回避する

この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文を使ってエラー回避するサンプルマクロです。

Sub Matchのエラー回避_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

 If n = 0 Then
  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文を使う場合は以下のとおりです。

Sub Matchのエラー回避_GoTo()
 Const KEY = "abc"

On Error GoTo ErrHandl
 Dim n As Long
 n = WorksheetFunction.Match(KEY, Range("A1:A100"), 0)
 MsgBox n
Exit Sub

ErrHandl:
 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

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » WorksheetFunction » VBAからMATCH関数利用時にエラーを回避する

「WorksheetFunction」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.
.