VBA「アプリケーション定義またはオブジェクト定義のエラーです」の原因と対処法!実行時エラー1004

VBA「アプリケーション定義またはオブジェクト定義のエラーです」の原因と対処法!実行時エラー1004

VBAを実行すると実行時エラー’1004’「アプリケーション定義またはオブジェクト定義のエラーです」が出たことはないでしょうか。

そんな中で悩むことは、

・VBA 実行時エラー’1004’「アプリケーション定義またはオブジェクト定義のエラーです」の原因はなに?
・VBA 実行時エラー’1004’「アプリケーション定義またはオブジェクト定義のエラーです」の対処はどうすればよい?

ですよね。

今回は、

VBA 実行時エラー’1004’「アプリケーション定義またはオブジェクト定義のエラーです」の原因と対処方法

についてまとめます!

VBA エラー 1004の原因1「正しくないフォーミュラを指定した場合」

正しくないフォーミュラを指定した場合にエラーが発生します。

サンプルコードです。

指定RangeのValueプロパティに正しくないフォーミュラを指定しています。

Sub エラー再現テスト1()
Range("A1").Value = "=SUM((1:A10)"
End Sub

指定RangeのFormulaプロパティに正しくないフォーミュラを指定しています。

Sub エラー再現テスト2()
Range("A1").Formula = "=SUM((1:A10)"
End Sub

指定RangeのFormula2プロパティに正しくないフォーミュラを指定しています。

Sub エラー再現テスト3()
Range("A1").Formula2 = "=SUM((1:A10)"
End Sub

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

VBA エラー 1004の原因2「Cellsコレクションのインデックスが0である場合」

Cellsコレクションのインデックスが0である場合にエラーが発生します。

サンプルコードです。

Cellsコレクションのインデックスに0を指定しています。

Sub エラー再現テスト4()
    MsgBox Cells(0, 1)
End Sub

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

VBA エラー 1004の原因3「CellsコレクションのインデックスがExcelのシートの最大行数を超えている場合」

CellsコレクションのインデックスがExcelのシートの最大行数を超えている場合にエラーが発生します。
なお、Excelのシートの最大行数は1048576行です。

サンプルコードです。

CellsコレクションのインデックスにExcelのシートの最大行数+1を指定しています。

Sub エラー再現テスト5()
    MsgBox Cells(1048577, 1)
End Sub

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

タカヒロ
タカヒロ
なお、以下のようにRangeオブジェクトに最大行数を超えた文字列を指定しても、Rangeエラーが優先されるため、エラー 1004とはなりません。
「Range(“A1048577”)」

VBA エラー 1004の原因4「CellsコレクションのインデックスがExcelのシートの最大列数を超えている場合」

CellsコレクションのインデックスがExcelのシートの最大列数を超えている場合にエラーが発生します。
なお、Excelのシートの最大列数は16384列です。

サンプルコードです。

CellsコレクションのインデックスにExcelのシートの最大列数+1を指定しています。

Sub エラー再現テスト6()
    MsgBox Cells(1, 16385)
End Sub

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

VBA エラー 1004の原因1「正しくないフォーミュラを指定した場合」の対処法

正しくないフォーミュラを指定した場合の対処法は正しいフォーミュラに直すことです。

サンプルコードです。

先ほどのエラー原因でのコードは、=SUM((1:A10) という式には括弧が余計に入っていましたので、
指定RangeのValueプロパティに文法的に正しいフォーミュラ”=SUM(A1:A10)”を指定しなおしました。

Sub エラー再現テスト1()
Range("A1").Value = "=SUM(A1:A10)"
End Sub

こちらも正しいフォーミュラにしました。

Sub エラー再現テスト2()
Range("A1").Formula = "=SUM(A1:A10)"
End Sub

こちらもです。

Sub エラー再現テスト3()
Range("A1").Formula2 = "=SUM(A1:A10)"
End Sub

一件づつ実行してみると、エラーは発生せず、問題ないことが確認できましたね。

VBA エラー 1004の原因2「Cellsコレクションのインデックスが0である場合」の対処法

VBAでは、Cellsコレクションのインデックスは1から始まりますのでCellsコレクションのインデックスを1以上に指定しましょう。

サンプルコードです。

Cellsコレクションのインデックスに1を指定しています。

Sub エラー再現テスト4()
    MsgBox Cells(1, 1)
End Sub

問題ないですね。

VBA エラー 1004の原因3「CellsコレクションのインデックスがExcelのシートの最大行数を超えている場合」の対処法

CellsコレクションのインデックスはExcelのシートの最大行数1048576行を超えないようにしましょう。

サンプルコードです。

CellsコレクションのインデックスにExcelのシートの最大行数以内を指定しています。

Sub エラー再現テスト5()
    MsgBox Cells(1048576, 1)
End Sub

問題ないですね。

VBA エラー 1004の原因4「CellsコレクションのインデックスがExcelのシートの最大列数を超えている場合」の対処法

CellsコレクションのインデックスはExcelのシートの最大列数16384列を超えないようにしましょう。

サンプルコードです。

CellsコレクションのインデックスにExcelのシートの最大列数+1を指定しています。

Sub エラー再現テスト6()
    MsgBox Cells(1, 16384)
End Sub

こちらも問題ないですね。

さいごに

今回は、

VBA 実行時エラー’1004’「アプリケーション定義またはオブジェクト定義のエラーです」の原因と対処方法

についてまとめました。

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

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



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

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








コメントを残す

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