エラーメッセージ「実行時エラー ’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 Subws はオブジェクト型なのに、中身が設定されていない(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 SubOKコード例(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 Subrng には何も代入されていないため、With rngは Nothing に対して操作しようとして失敗します。
OKコード例(オブジェクトを設定)
Sub Example1()
		Dim rng As Range
		Set rng = Range("A1")  ' オブジェクトを正しく設定
		With rng
		    .Value = "テスト"  ' 正常に動作
		End With
End SubWith を使う前に必ずSet でオブジェクトを初期化しましょう。
原因④オブジェクトが未取得
NGコード例(ファイルやオブジェクトが取得できなかったのにアクセスしている)
Sub Example1()
		Dim wb As Workbook
		Set wb = Workbooks.Open("C:\存在しないファイル.xlsx")
		Debug.Print wb.Name  ' ← ファイルが開けなければここでエラー
End SubWorkbooks.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’ はほぼ回避できます。

