このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

「オブジェクトが必要です」(実行時エラー424)の原因を解説(VBA)

2024年2月15日

マクロを書いていると時々「オブジェクトが必要です」のエラーに出くわすことがあります。

なんとなくオブジェクト絡みのエラーなのだろうと予想が付くのですが、具体的な原因を突き止めるのは意外と難しかったりします。

そこで今回は、このエラーが発生する主な2つを原因を紹介します。

エラーが起こる理由を理解して、原因を解消してみてください。

VBAが難しいと感じたら
プロにお任せして代わりに作ってもらってはいかがでしょう?
おすすめのVBAプログラマーはこちらから

原因①:変数にオブジェクトが代入されていない

実行時エラー424:オブジェクトが必要です

原因の1つは、変数にオブジェクトが代入されていないことです。

この場合はエラーメッセージに「実行時エラー424」というエラー番号が表示されます。

このエラーが出た場合、オブジェクト変数にオブジェクトが代入されていません。(もしくはオブジェクト以外の値などが代入されています)

Sub ErrorCause1()
    '''変数にオブジェクトが代入されていない
    '''原因:Setの付け忘れ
    
    Dim rng
    rng = Range("A1") 'SetがないためA1セルの「値」が代入されている
    
    'ここで実行時エラー424が発生する
    '(rngは値のためValueプロパティが参照できない)
    Debug.Print rng.Value
End Sub

ありがちなのはサンプルコードのようにSetを付け忘れているケースです。

Setを書かずにRangeオブジェクトを代入しようとした場合、Rangeオブジェクトではなく値が代入されてしまいます。

そのため、Rangeオブジェクトの変数と思い込んでrng.Valueなどと記載するとエラーが発生します。

原因②:値型の変数にオブジェクトを代入している

コンパイルエラー:オブジェクトが必要です

もう1つの原因は、値型の変数にオブジェクトを代入していることです。

こちらは実行時エラーではなく、コンパイルエラーです。

Sub ErrorCause2()
    '''原因:値型の変数にオブジェクトを代入している
    '''コンパイルエラーが発生する
    
    'Long型の変数にオブジェクトを代入している
    Dim ws As Long
    Set ws = ActiveSheet
End Sub

サンプルコードのようにLong型の変数にオブジェクトを代入しようとしたりすると、このエラーが発生します。

エラー解消方法

Sub ErrorCause1-OK()
    '''変数にオブジェクトが代入されていない
    '''原因:Setの付け忘れ
    
    Dim rng
    Set rng = Range("A1") 'Setを追加!
    
    'ここで実行時エラー424が発生する
    '(rngは値のためValueプロパティが参照できない)
    Debug.Print rng.Value
End Sub
Sub ErrorCause2-OK()
    '''原因:値型の変数にオブジェクトを代入している
    '''コンパイルエラーが発生する
    
    'Long型の変数にオブジェクトを代入している
    Dim ws As Sheet 'Sheet型に変更!
    Set ws = ActiveSheet
End Sub

エラーを解消するには、Setの追加もしくは型の変更を行います。

↑にエラーとならない正しいコードを書きました。

エラーとなるコードと比較してみて、どのような違いがあるのか調べてみてください。

VBAが難しいと感じたら
プロにお任せして代わりに作ってもらってはいかがでしょう?
おすすめのプログラマーを紹介しています

《VBA中級者向けの本》
VBA上級者を目指したい人にはパーフェクトExcel VBA一択です。

created by Rinker
技術評論社
¥3,608 (2024/02/29 15:48:28時点 Amazon調べ-詳細)

VBA

Posted by やろまい