【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に関する記事を不定期で投稿していますので、是非ご覧ください!

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

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