【Excel VBA】Find実行時に「実行時エラー’91’」が出る原因と対処法

Excel
スポンサーリンク

今回はFindメソッド実行時に「実行時エラー’91’:オブジェクト変数またはWithブロック変数が設定されていません。」が出る原因と対処法を紹介したいと思います。

実行時エラー’91’:オブジェクト変数またはWithブロック変数が設定されていません。
スポンサーリンク

エラーが発生する原因

原因

結論から言うと対象のRange変数の中身がNothingになっている可能性があります

以下のコードを使って説明します。

Sub test_Find()

    Dim Rng                     As Range
    Dim target                  As String
    
    target = "はりぼなブログ"
    
    Set Rng = Range("A:A").Find(target)
    
    MsgBox target & "は" & Rng.Row & "行目にあります。"

End Sub

コードについてざっくり説明すると、指定された文字列(target)をA列内で検索し、文字列が何行目にあるかを表示させる感じです。

ここでポイントになるのが文字列を検索する処理で、ここではFindメソッドを使用しています。

Findメソッドについてざっくり説明すると、指定した範囲内に文字列があるか検索し、見つかったセルを取得する感じです。もしセルが見つからなかった場合はNothingが返ってきます

A列に文字列がなければNothingが返され、その状態で行数(Rng.Row)を取得しようとしてもRngには何も入っていない状態である為、実行時エラー’91’が発生してしまうわけです。

対処法

シンプルではありますが、RngがNothingであれば処理しないようにするというのが無難かと思います。RngがNothingかどうか判定する時は、If文を使用するのがお勧めです。

Sub test_Find()

    Dim Rng                     As Range
    Dim target                  As String
    
    target = "はりぼなブログ"
    
    Set Rng = Range("A:A").Find(target)
    
    If Rng Is Nothing Then
        MsgBox target & "が入ったセルが見つかりませんでした。"
    Else
        MsgBox target & "は" & Rng.Row & "行目にあります。"
    End If
    
End Sub

IF文を使用することでFindメソッドでNothingが返されてもエラーを発生させなくすることが可能になるので、Findメソッドを使用する時は変数を使用する前Nothingかどうかを判定するようにしましょう

あと、Nothingかどうか判定する時は=(イコール)ではなくIsで繋ぐようにしましょう。

If Rng Is Nothing Then 
~
End If
スポンサーリンク

まとめ

今回はFindメソッド実行時に「実行時エラー’91’:オブジェクト変数またはWithブロック変数が設定されていません。」が出る原因と対処法を紹介しました。

Findメソッド使用後にエラーが出る時は、対象の変数がNothingになっていないか確認してみましょう。

このブログではVBAに関する記事を不定期で投稿していますので、是非ご覧ください!

タイトルとURLをコピーしました