
上図のようなエラー表示が出た場合、原因を理解することで問題無く対処することが可能です。
この記事では、「オブジェクトが必要です」と表示された場合の原因と対処法を、
できるだけわかりやすく解説いたします。
-著者情報-
名前:Utatane
VBA(マクロ)歴:3年
Excel使用歴:15年以上
ひとこと:初心者だった当時に戻った気持ちになって解説いたします
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
VBA(Excelマクロ)で「オブジェクトが必要です」というエラーが出る原因と対処法

「オブジェクトが必要です」はどんなエラー?
このエラー(実行時エラー424オブジェクトが必要です)は、その名の通り
オブジェクトが必要な場面で、適切なオブジェクトが与えられていない場合に発生します。
ちょっとピンと来ないですよね…。
まずオブジェクトとは、セルやシート、ブックなどが該当します。
これらのオブジェクトを変数に代入する際、発生する可能性があるのがこのエラーです。
なぜこのようなことが起こるのでしょうか?
例えばセルは、書き込みされた値だけではなく、罫線や文字の色・位置などの情報も含んでいます。

いろんな情報が詰まっているために、通常の変数では手に負えません…。
変数が「私の手に負えません…」と言ってきているのがこのエラーです。
通常の変数は、紙一枚のようなものだと思ってください。
オブジェクトは情報が多いため、紙一枚では足りません。
なので「紙一枚じゃ足りないよ!」と怒られているといった感じでしょうか…。
では、このエラーが発生する原因と対処法を見ていきましょう。
「オブジェクトが必要です」と表示される原因と対処法
「Set」の使い忘れ
大半の原因がコレです。
下記のVBAコードを見てください。
Sub オブジェクトが必要です()
Dim rng As Variant
rng = Range("A1")
Debug.Print rng.Value
End Sub
セルを変数に代入し、セルの値を表示しただけのマクロですが、エラーが出ました。

原因は「Set」の使い忘れで、正しくは下記の通りとなります。
Sub 解決()
Dim rng As Variant
Set rng = Range("A1")
Debug.Print rng.Value
End Sub
3行目の頭に「Set」が追加されただけです。
これでエラーが解消されました。
紙一枚の変数に「Set」を付けて、ノート一冊に拡張したようなものでしょうか…。
これでオブジェクトの情報も書ききることができます。
「Range(“A1”).Value」というように、セルの値だけを変数に入れる場合は「Set」をつける必要はありません。
ここでSetを付けてしまうと、別のエラーが発生します。
Sub 別のエラー()
Dim rng As Variant
Set rng = Range("A1").Value ' 別のエラー
Debug.Print rng
End Sub

Setを「付ける」or「付けない」は、下記記事をご参考ください。
存在しないコントロールやオブジェクトを参照している
Set以外で代表的なのはコレです。
ユーザーフォームを使ったり、コントロールパーツを操作している場合にありえる原因です。
Sub オブジェクトが必要です()
UserForm1.TextBox99.Text = "Hello" ' ← TextBox99 は存在しない場合
End Sub
ユーザーフォーム名やコントロール名を再確認してみてください。
これは紙やノート以前に、ウソ(存在しない情報)を書いて怒られてしまったものだと思ってください。
エラーを回避するためのコツ
オブジェクト(セルやシート、ブックなど)を変数に代入する際は、「Set」をつける癖をつけましょう。
オブジェクトを入れる変数名を「rng」など、自分にはわかりやすい名前にするのも有効です。
「rng」→「range」→「セル」→「オブジェクト」→「Setが必要」と芋づる式に思い出すことができ、エラーを回避できます。
そのためにも、「Option Explicit」を有効にしておきましょう。
これで変数の宣言を省略できなくなり、よりエラーが出にくくなります。
最後に
VBA(Excelマクロ)で「オブジェクトが必要です」というエラーが出る原因と対処法を解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!