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

エラー表示

このエラーが発生すると、マクロ起動時(コンパイル時)に次のエラーが表示されます。
実行時エラー '1004'

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

エラーの発生理由について

本エラーの原因はいくつか想定できます。
順を追ってみていきましょう。

ケース1:Cellsの指定ミス

Cellsを用いてありえないセルを指定してしまった時です。次のサンプルでは、xに値を代入せず、xが0の状態で(数値型の変数の初期値は0)、セルを指定した結果、エラーが発生しています。

' ケース1で本エラーが発生するサンプル
Sub TestFunc1()
    Dim x as Long
    MsgBox ThisWorkbook.Worksheets(1).Cells(x, 1)
End Sub
ケース2:Rangeの範囲指定ミス
セルの範囲の指定を誤った時です。下記サンプルでは、Range内にCellsを入れて範囲を指定しています。原因としては、Rangeにシートを指定しているにもかかわらず、Cellsにシートの指定をしていないことです。(Range, Cells共にシートを指定する必要があります)
' ケース2で本エラーが発生するサンプル
Sub TestFunc2()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets(2)
    ws.Range(Cells(1, 1), Cells(2, 2)).Font.Color _
        = RGB(255, 0, 255)
    Set ws = Nothing
End Sub

解決方法は?

ケース1の解決方法

ケース1ではCells(0, 1)を指定したことが原因でした(値を入れていない整数型の初期値は0です)。正しくセルを指定するよう変数に値を代入しましょう。

' ケース1の修正例
Sub TestFunc1()
    Dim x as Long
    x = 1
    MsgBox ThisWorkbook.Worksheets(1).Cells(x, 1)
End Sub
ケース2の解決方法

ケース2ではRangeとそのカッコ内のCellsで異なるシート指定したことが原因でした(シートを指定していないCellsはアクティブシートを指定したことになります)。RangeとCellsで指定のシートを統一するため、Cellsにも"ws."をつけてシートを指定しましょう。

' ケース2の修正例
Sub TestFunc2()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets(2)
    ws.Range(ws.Cells(1, 1), ws.Cells(2, 2)).Font.Color _
        = RGB(255, 0, 255)
    Set ws = Nothing
End Sub

補足

ケース2は"Cells"の前のシートを"ws."で指定せず、エラー発生前にWorksheets(2)をアクティブにすることで正しく動作しますが、他のエラーを招く恐れがあるためお勧めしません。

予防策

ケース1の予防策

For文等の繰り返し処理を行うときに変数の初期値として0を代入してしまい、本エラーが発生することが多いです。For文等を使用するときは注意しましょう。

ケース2の予防策

For文等の繰り返し処理を行うときに変数に0を入れてしまうことが多いです。For文を使用するときは注意しましょう。

関連リンク

ページの先頭へ