作業の自動化と効率化を図るために、よくエクセルでVBAを導入することが多いのです。エクセルでVBAを利用する場合、よく「実行中エラー”1004”」が発生します。本文では、このエラーに対して、様々な効果的な対策を皆さんに紹介します。
エクセル「実行中エラー”1004”」とは
実行時エラー1004は、Microsoft ExcelのVBA(Visual Basic for Applications)コードを実行する際に発生するエラーです。このエラーは、VBAコード内のオブジェクト(通常はセル、範囲、ワークシート)に対して無効な操作が試行された場合に発生します。
「実行中エラー”1004”」のエラーメッセージ
実行時エラー”1004″は、Excel VBAでよく発生するエラーであり、エラーメッセージは次のようになります:
- 「実行時エラー ‘1004’:」
このエラーメッセージは、エラーの種類を示していますが、詳細なエラーメッセージは表示されません。実際のエラーメッセージには、具体的な情報が含まれている場合があります。たとえば、次のようなエラーメッセージが表示される場合があります:
- 「実行時エラー ‘1004’: メソッド ‘Range’ の呼び出し時に失敗しました」
このメッセージでは、”Range”メソッドの呼び出しで何らかの問題が発生したことが示されています。エラーメッセージの内容は、具体的な状況によって異なる可能性があります。
エラーメッセージは、問題の特定やデバッグに役立ちます。通常、エラーメッセージはデバッグ時に表示され、問題の原因や発生箇所を特定するために使用されます。エラーメッセージを読んで理解し、適切な対策を講じることが重要です。
「実行中エラー”1004”」が発生する原因
具体的な原因はケースバイケースですが、以下のような状況でエラー1004が発生することが多く見られています。
- 開こうとするファイルが存在しない場合。
- ファイルに破損がある場合。
- 範囲が存在しないまたは無効な範囲にアクセスしようとした場合。
- プロパティやメソッドが存在しないオブジェクトにアクセスしようとした場合。
- オブジェクトが保護されていて、編集できない状態である場合。
- ファイルが読み取り専用で開かれている場合。
「実行中エラー”1004”」のクイック修復
それでは、もしエクセルでVBAの使用中に「実行中エラー”1004”」が発生する場合、クイック修復として、次のことを確認してください。
- ファイルを開く場合、開こうとするファイルがちゃんと存在しているかを確認します。
- 開くファイルをダブルクリックして破損がなく正常に開けるかどうかを確認します。
- オブジェクトや範囲が正しく参照されているか確認します。
- オブジェクトや範囲が存在するかどうかを確認します。
- オブジェクトが保護されている場合、保護を解除してから操作を行います。
- ファイルが読み取り専用で開かれている場合、編集できるように変更します。
ファイルの存在と破損を確認することが簡単ですが、次はこれらの対策を詳しく紹介します。どのようにVBAのコードを変更してエラーを解消するかを知らない場合、次の内容を参照してください。
対策1、オブジェクト範囲を適正する
もし、エクセルに存在しないワークシートをしている場合、エラー1004が発生します。具体的なエラー例と修復例を以下に示します。
エラー例:
以下のコードを実行したときに、実行時エラー1004が発生します。
Sub Example()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
' 存在しない範囲にアクセスする
ws.Range("A10:B20").Value = "Hello"
End Sub
修復対策
この問題を修正するには、存在する範囲にアクセスするか、存在しない範囲に対する操作を避ける必要があります。修正例を以下に示します。
Sub Example()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
' 存在する範囲にアクセスする
ws.Range("A1:B5").Value = "Hello"
End Sub
修正後のコードでは、存在する範囲”A1:B5″に対して値を代入しています。
対策2、指定するプロパティやメソッドを変更する
プロパティやメソッドが存在しないオブジェクトにアクセスする場合、「実行中エラー”1004”」も発生します。次は、具体的なエラー例と修復方法を示します。
エラー例:
以下のコードを実行したときに、実行時エラー1004が発生します。
Sub Example()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
' 存在しないプロパティにアクセスする
Dim value As Variant
value = ws.NonexistentProperty
End Sub
この場合、NonexistentProperty
という存在しないプロパティにアクセスしようとしているため、エラー1004が発生します。
修復例:
この問題を修正するには、存在するプロパティやメソッドにアクセスするように修正する必要があります。修正例を以下に示します。
Sub Example()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
' 存在するプロパティにアクセスする
Dim value As Variant
value = ws.Name
End Sub
修正後のコードでは、存在するプロパティName
にアクセスしています。
対策3、指定のファイルを変更する
VBAで存在しないファイルを開くコマンドを入力して実行する場合、「実行中エラー”1004”」も発生します。次の具体例を参考してください。
エラー例:
以下のコードを実行したときに、ファイルが存在しないため実行時エラー1004が発生します。
Sub OpenFileExample()
Dim filePath As String
filePath = "C:\Path\to\Nonexistent\File.xlsx" ' 存在しないファイルのパスを指定します
' ファイルを開く
Workbooks.Open filePath
End Sub
この場合、指定したファイルパスに存在しないファイルを開こうとしたため、実行時エラー1004が発生します。
修復例:
この問題を修正するには、ファイルの存在を事前に確認するなど、適切なエラーハンドリングを行う必要があります。修正例を以下に示します。
Sub OpenFileExample()
Dim filePath As String
filePath = "C:\Path\to\Nonexistent\File.xlsx" ' 存在しないファイルのパスを指定します
' ファイルの存在を確認してから開く
If Dir(filePath) <> "" Then
Workbooks.Open filePath
Else
MsgBox "ファイルが見つかりません。"
End If
End Sub
修正後のコードでは、Dir
関数を使用してファイルの存在を確認してからファイルを開くようにしました。Dir
関数は指定したパスのファイルやフォルダが存在するかどうかを判定するために使用できます。
修復例では、ファイルが存在しない場合にメッセージボックスを表示してユーザーに通知しています。修正例は一例であり、実際のケースに合わせて適切なエラーハンドリングを行うことが重要です。
対策4、ファイルの書き込み保護を解除する
読み取り専用のファイルを編集可能にするには、次の手順を試してみてください。
- ファイルを別の場所に保存する: 読み取り専用のファイルを編集する前に、まずは元の読み取り専用ファイルを別の場所に保存します。たとえば、デスクトップや別のフォルダにコピーして保存します。
- ファイルの属性を変更する: 保存したファイルを右クリックし、プロパティを選択します。プロパティウィンドウが開いたら、「読み取り専用」のチェックボックスをオフにします。これにより、ファイルの読み取り専用属性が解除されます。
- Excelでファイルを開く: Excelを開き、ファイルメニューから「開く」を選択します。保存したファイルを選択し、開くボタンをクリックします。
- 編集モードに切り替える: ファイルが開かれたら、Excelのタイトルバーに「[読み取り専用]」と表示されることがあります。この場合、Excel内で編集することはできません。編集モードに切り替えるためには、F2キーを押すか、Excelのタイトルバー上の「編集モード」をクリックします。

以上の手順を実行することで、読み取り専用のファイルを編集可能にすることができます。ただし、ファイルの属性やセキュリティ設定によっては、上記の手順で解決できない場合もあります。その場合は、ファイルの所有者や管理者に連絡し、必要な権限を取得する必要があります。
対策5、オブジェクトの保護状態を解除する
オブジェクトが保護されている場合、保護を解除するには次の手順を試してみてください。
ステップ1.Excelを開き、保護されているオブジェクトが含まれるワークブックを選択します。
ステップ2.「ホーム」タブに移動し、「書式」グループで「セルの書式設定」をクリックします。

ステップ3.「保護」タブに切り替え、「ロック」のチェックを外して、「OK」をクリックします。

これにより、保護されていたオブジェクトが解除され、編集が可能になります。ただし、保護されたオブジェクトの解除にはパスワードが必要な場合があります。パスワードを知らない場合は、ファイルの所有者や管理者に連絡し、パスワードを取得する必要があります。
なお、オブジェクトの保護解除については、具体的なオブジェクトの種類や保護設定によって手順が異なる場合があります。上記の手順が効果的でない場合は、詳細な情報を提供していただくことで、より具体的な支援が可能となります。
対策6、ActiveXの設定を変更する
また、ExcelのActiveXの設定を変更することで、「実行中エラー”1004”」を解消することもできるかもしれません。エクセルでActiveXの設定を変更するには、以下の手順を参照してください。
ステップ1.エクセルアプリを開き、左側のメニューで一番下にある「オプション」を選択します。

ステップ2.表示される設定のウィンドウで「トラストセンター」→「トラストセンターの設定」の順にクリックします。

ステップ3.「ActiveXの設定」→「確認メッセージを表示せずに、すべてのコントロールを制限なしに有効する」を選択して、「OK」をクリックして適用します。

ご案内:提示メッセージのように、セキュリティ考慮で危険なコントロールが実行さえる可能性がありますので、この操作は推奨されません。
まとめ
エクセルの実行中エラー”1004”は、VBAの利用中によく発生するエラーになります。多くの場合、VBAのコードに誤りがあるのが原因です。そこで、入力したコードをレビューして、指定のファイル、範囲、プロパティやメソッドなどを間違わないように、コードを適正する必要があります。また、ファイルが破損したり、読み込み専用状態になったり、セルが保護されたりすると、同じく実行中エラー”1004”が発生することもあるので、この点にも注意を払ってください。