【VBA】エラー「オブジェクト変数またはWithブロック変数が設定されていません」の解決方法

エラーメッセージ「実行時エラー ’91’: オブジェクト変数またはWithブロック変数が設定されていません」の原因と解決方法を紹介します!

目次

よくある原因パターン

原因のパターン説明
1. Set を使っていないオブジェクト変数(例:Range、Workbookなど)を正しく初期化していない
2. Find の戻り値が Nothing検索結果が見つからなかったのに .Address などを呼び出している
3. With ブロック内が空With で使うオブジェクトが未設定(Nothing)
4. オブジェクトが未取得Workbooks.Open に失敗していたのに変数にアクセスしている

原因①Setを使っていない

NGコード例(Set し忘れ)

Sub Example1()
		Dim ws As Worksheet
		ws.Name = "シート1"  ' ← ここでエラー
End Sub

ws はオブジェクト型なのに、中身が設定されていない(Nothing)ためエラーになります。

OKコード例(Set を使う)

Sub Example1()
		Dim ws As Worksheet
		Set ws = ThisWorkbook.Sheets("シート1")
		ws.Name = "シート1"  ' 正常に動作
End Sub

原因②Finfの戻り値が Nothing

NGコード例(FindでNothingを確認せずアクセス)

Sub Example1()
		Dim rng As Range
		Set rng = Cells.Find("商品名")
		MsgBox rng.Address  ' 見つからなければここでエラー
End Sub

OKコード例(Find結果をチェックする)

Sub Example1()
		Dim rng As Range
		Set rng = Cells.Find("商品名")
		If Not rng Is Nothing Then
		    MsgBox rng.Address
		Else
		    MsgBox "見つかりませんでした"
		End If
End Sub

原因③With ブロック内が空

NGコード例(ブロック内のオブジェクトが未設定)

Sub Example1()
		Dim rng As Range
		With rng
		    .Value = "テスト"  ' ← ここでエラー '91' が発生
		End With
End Sub

rng には何も代入されていないため、With rngは Nothing に対して操作しようとして失敗します。

OKコード例(オブジェクトを設定)

Sub Example1()
		Dim rng As Range
		Set rng = Range("A1")  ' オブジェクトを正しく設定
		With rng
		    .Value = "テスト"  ' 正常に動作
		End With
End Sub

With を使う前に必ずSet でオブジェクトを初期化しましょう。

原因④オブジェクトが未取得

NGコード例(ファイルやオブジェクトが取得できなかったのにアクセスしている)

Sub Example1()
		Dim wb As Workbook
		Set wb = Workbooks.Open("C:\存在しないファイル.xlsx")
		Debug.Print wb.Name  ' ← ファイルが開けなければここでエラー
End Sub

Workbooks.Open が失敗して Nothing が返っているため、.Name にアクセスするとエラー ’91’。

OKコード例(Is Nothingで取得できたかチェック)

Sub Example1()
		Dim wb As Workbook
		On Error Resume Next
		Set wb = Workbooks.Open("C:\存在しないファイル.xlsx")
		On Error GoTo 0
		
		If wb Is Nothing Then
		    MsgBox "ファイルが開けませんでした。"
		Else
		    Debug.Print wb.Name  ' 正常に動作
		End If
End Sub

ファイルが開けるかどうか不確定なときは Is Nothing で必ずチェックしましょう。

補足:Nothing チェックの基本パターン

If オブジェクト Is Nothing Then
    ' 未設定・失敗時の処理
Else
    ' 正常に処理を続ける
End If

このパターンを覚えておくだけで、実行時エラー ’91’ はほぼ回避できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次