VBA エラー 1004の6つの原因と対処方法

VBAを実行すると実行時エラー’1004’を見る機会はありませんか?

コードをみても誤った箇所がわからず途方に暮れる場合もあるかと思います。

そんな中で悩むことは、

・VBA 実行時エラー’1004’の原因はなに?
・VBA 実行時エラー’1004’の対処はどうすればよい?

ですよね。

今回は、
VBA 実行時エラー’1004’の6つの原因とサクっとできる対処方法について
まとめます!



もくじ

VBA 実行時エラー’1004’はどんなエラー?

「実行時エラー‘1004’」はVBA実行中に初声うするエラーで、主に、指定したファイルが見つからなかったり、セルなど参照先がなかったりなど、指定先の入力ミスなどで起こります。

タカヒロ
タカヒロ
指定先を修正すれば済むので、比較的簡単に解消できるエラーですね。

それでは、エラー発生原因と対策について順に説明していきます!



VBA エラー 1004の原因①「既に開いているブックと同じ名前のブックを開こうとしたとき」

あるExcelブックをWクリックして開きます。
次に、開いたExcelブック名を相対参照で指定し、Openメソッドで開こうとするとエラーが発生ます。

サンプルコードです。

Sub エラーテスト1()

    Dim ObjTest As Object
    Set ObjTest = Workbooks.Open("\\既に開いているExcelブック.xlsx")
End Sub

エラー「実行時エラー’1004’ ファイルにアクセスできません。」がでましたね。

なお、フルパス指定の場合は同様の条件であってもエラーは発生しません。

タカヒロ
タカヒロ
他のVBAなどのプログラムによってファイルが開かれて使用されている場合も該当しますので注意したいところですね。

 

VBA エラー 1004の原因①「既に開いているブックと同じ名前のブックを開こうとしたとき」の対処方法は既に開いているExcelブックを閉じるか、別のブック名を指定

既に開いているExcelブックを閉じるか、別のブック名を指定するようにしましょう。



VBA エラー 1004の原因②「ファイル名またはパスが存在しない」

存在しないファイル名やパスを指定した際にエラーが発生します。

サンプルコードです。

Sub エラーテスト2()

    Dim ObjTest As Object
    Set ObjTest = Workbooks.Open("C:\存在しないExcelブック.xlsx")
End Sub

エラー「実行時エラー’1004’ ***が見つかりません。名前が変更されたか、移動や削除が行われた可能性があります」がでましたね。

 

VBA エラー 1004の原因②「ファイル名またはパスが存在しない」の対処方法は存在するファイル名、パスを指定する

存在するファイル名、パスを指定するようにしましょう。



VBA エラー 1004の原因③「既に存在するシート名を新規シート名にする場合」

既に存在するシート名を新規シート名にする場合にエラーが発生ます。

追加したシート名を存在しているシート名に変えてみます。

サンプルコードです。
設定とは異なる選択範囲名を指定します。

Sub エラーテスト3()

    ActiveSheet.Name = "存在しているシート"

End Sub

エラー「この名前は既に使用されています。別の名前を入力してください。」がでましたね。

 

VBA エラー 1004の原因③「既に存在するシート名を新規シート名にする場合」の対処方法は既存シート名とは別のシート名を指定する

既存シート名とは別のシート名を指定するようにしましょう。



VBA エラー 1004の原因④「存在しない名前付き範囲を指定した場合」

存在しない名前付き範囲を指定した場合にエラーが発生します。

選択範囲名を”選択範囲1″で設定します。

サンプルコードです。
設定とは異なる選択範囲名を指定します。

Sub エラーテスト4()

    ActiveSheet.Range("存在しない選択範囲").Select

End Sub

エラー「アプリケーション定義またはオブジェクト定義のエラーです。」がでましたね。

VBA エラー 1004の原因④「存在しない名前付き範囲を指定した場合」の対処方法は存在する名前付き範囲を指定する

存在する名前付き範囲を指定しましょう。

サンプルコードです。
設定した選択範囲名を指定します。

Sub エラーテスト4()

    ActiveSheet.Range("選択範囲1").Select

End Sub



VBA エラー 1004の原因⑤「アクティブでないシートの範囲を指定した場合」

アクティブでないシートの範囲を指定した場合にエラーが発生します。

“存在しているシート”の範囲を指定したいときに、別のシートを参照している状態で以下を実行します。

サンプルコードです。

Sub エラーテスト5()

    Worksheets("存在しているシート").Range("A1:B2").Select

End Sub

エラー「RangeクラスのSelectメソッドが失敗しました。」がでましたね。

VBA エラー 1004の原因⑤「アクティブでないシートの範囲を指定した場合」の対処方法はアクティブにしてから実行する

対象のシートをアクティブにしてから範囲を指定するようにしましょう。

サンプルコードです。
範囲選択の前に、対象シートをセレクトするようにしました。

Sub エラーテスト5()

    Worksheets("存在しているシート").Select
    Worksheets("存在しているシート").Range("A1:B2").Select

End Sub

問題ないですね。



VBA エラー 1004の原因⑥「結合したシートに対して誤った範囲指定で編集しようとした場合」

結合したシートに対して誤った範囲指定で編集しようとした場合にエラーが発生します。

サンプルでは選択範囲”A1:B2″の値をコピーし、

結合セルを含む”A5:B6″へコピーする内容です。

サンプルコードです。

Sub エラーテスト6()

    Worksheets("存在しているシート").Select
    Worksheets("存在しているシート").Range("A1:B2").Copy
    Worksheets("存在しているシート").Range("A5:B6").PasteSpecial
    
End Sub

エラー「この操作は結合したセルには行えません。」がでましたね。

VBA エラー 1004の原因⑥「結合したシートに対して誤った範囲指定で編集しようとした場合」の対処方法はセルの範囲の整合性をとる

結合を含むセルの編集を行う場合は、セルの範囲指定を結合セルを考慮した内容にしましょう。

上記のコピー&ペーストの例ですと、

コピー元をコピー先と同じようにセルを結合させ、その範囲に訂正するか、
コピー先のセルの結合を解除するようにします。



さいごに

今回は、
VBA 実行時エラー’1004’の6つの原因とサクっとできる対処方法について
まとめました。

VBAのエラーはパターンを知っておくと発生した時に慌てず対応することができますので、

しっかりと対処方法を把握するようにしておきたいですね!



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です