1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

[ExcelVBA]WorksheetFunction.Matchメソッドを使って検査値が見つからなかった場合のエラー対応について

Posted at

はじめに

VBAでMATCH関数(WorksheetFunction.Matchメソッド)を使った際に発生したエラーについて、対応方法をまとめます。

MATCH関数がエラーを返す

ワークシート上

ワークシート上でMATCH関数を、第3引数(照合の種類)= 0(完全一致)、の設定で使った時、検査値が検査範囲の中に見つからないと、MATCH関数はエラー(#N/A)を返します。
1キャプチャ.PNG

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段階の対応が必要です。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?