こんにちは!ぐーです。
いつもブログをご覧いただき、ありがとうございます!
Excel作業で頻発するのがこのエラー。
画面に突然現れる「実行時エラー ’91’: オブジェクト変数またはWithブロック変数が設定されていません」。
突然の表示に、思わずドキッとしてしまいますよね。「何か重大なミスをしてしまったのでは……」と不安になる方も多いはずです。
そこで今回は、このエラーの内容と、コピペで即活用できる解決策を分かりやすく解説していきます。
エラーの正体は「中身が空っぽの箱」
このエラーが発生する原因の多くは、命令語「Set(セット)」の記述漏れにあります。
VBAにおいて、ワークシートやセル範囲といった「オブジェクト(操作対象)」を変数(箱)に代入する際は、必ず「Set」というキーワードを用いる必要があります。
これを忘れてしまうと、変数の中身は「Nothing(空っぽ)」の状態になってしまいます。
中身がない変数に対して「処理を実行して!」と命令しても、VBAは「対象が存在しないので無理です!」とエラーを返します。これが、あのエラーメッセージの正体です。
よくある間違いパターン(Bad & Good)
それでは、具体的なミスを例に挙げて確認していきましょう。
特に、セルの検索を行う「Findメソッド」を使用する際によく発生します。
❌ 【Bad】 エラーが出る書き方
Sub ErrorSample()
Dim FoundCell As Range
' ここでエラー発生!Setを忘れています
FoundCell = Range("A:A").Find("売上データ")
MsgBox FoundCell.Address
End Sub
数値や文字列を代入する際は x = 10 のように記述しますが、Range(セル)などのオブジェクトを扱う際は、それだけでは正しく動作しないのです。
⭕ 【Good】 正しい書き方
Sub FixedSample()
Dim FoundCell As Range
' 先頭に Set をつけるだけ!
Set FoundCell = Range("A:A").Find("売上データ")
' 見つからなかった場合の対策も入れておきます
If Not FoundCell Is Nothing Then
MsgBox "データは " & FoundCell.Address & " にありました!"
Else
MsgBox "データは見つかりませんでした。"
End If
End Sub
もう一つの落とし穴:検索で見つからなかった時
実は、正しく「Set」と記述していても、このエラーが発生するケースがあります。
それは、「検索対象の文字列が見つからなかったとき」です。
Findメソッドは、条件に一致するセルが見つからない場合、変数に「Nothing(空っぽ)」を代入します。
その状態で「Address(セルの場所)」などの情報を取得しようとすると、「参照先がない」ためにエラーが起きてしまうのです。
そのため、先ほどの「Good」コードのように、If Not FoundCell Is Nothing Then(もし変数の中身が空っぽでなければ、という確認)を入れておくのです。
明日から使えるコード
最後にそのまま使えるエラー回避用の汎用コードをご紹介します。ぜひコピーして活用してください。
Sub SafeSearch()
Dim ws As Worksheet
Dim rng As Range
Dim searchStr As String
' シートの設定(ここでもSetが必要です!)
Set ws = ThisWorkbook.Sheets("Sheet1")
searchStr = "探したい文字"
' 検索実行
Set rng = ws.Range("A:A").Find(What:=searchStr, LookAt:=xlPart)
' エラー回避の条件分岐
If rng Is Nothing Then
MsgBox "「" & searchStr & "」は見つかりませんでした。", vbExclamation
Else
MsgBox "発見!場所は: " & rng.Address, vbInformation
rng.Select ' 見つけたセルを選択
End If
End Sub
まとめ
このエラーに遭遇したら、以下の2点をチェックしましょう!
- 「Set」を書き忘れていないか?
- Findなどで「見つからなかった時(Nothing)」の処理を書いているか?
これら2つのポイントを意識するだけで、もうあのエラー画面に慌てる必要はなくなります!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント