今回はFindメソッド実行時に「実行時エラー’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に関する記事を不定期で投稿していますので、是非ご覧ください!
コメント