Excelで実行時エラー1004が発生したときの直し方【原因と対処法を完全解説】
実行時エラー1004(Run-time error '1004')は、Microsoft Visual Basicに関連するエラーコードで、Microsoft Excelを使用している際に発生することがあります。このエラーはExcel 2003およびExcel 2007で特に多く報告されていますが、それ以降のバージョンのExcelでも同様の問題が起こる可能性があります。マクロ(VBA)を使ってワークシートを操作している場合には注意が必要です。
このエラーが発生すると、主に以下の2種類のいずれかのメッセージが表示されます。
実行時エラー1004の2つのパターン
- 「実行時エラー '1004':Worksheet クラスの Copy メソッドが失敗しました」
- 「実行時エラー '1004':アプリケーション定義またはオブジェクト定義のエラーです」
表示されるメッセージの文言は環境によって多少異なる場合がありますが、エラーコード自体は常に「1004」です。どちらのパターンであっても、ほとんどの場合、既存のワークシートのコピーを作成し、元のシートと同じブック内に貼り付ける処理を行うマクロを実行したときにこのエラーが発生します。
実行時エラー1004が発生する原因
幸いなことに、このエラーの原因は明確になっています。実行時エラー1004は、マクロが元のワークシートを、「名前の定義」が設定されたブックに対してコピーしようとしたとき、そのブックが事前に保存・終了されていない状態であると発生します。
例えば、以下のようなマクロコードでは、ループ内でシートのコピーを繰り返すため、最終的にエラー1004が発生します。
Sub CopySheetTest()
Dim iTemp As Integer
Dim oBook As Workbook
Dim iCounter As Integer
' 新しい空のブックを作成:
iTemp = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
Set oBook = Application.Workbooks.Add
Application.SheetsInNewWorkbook = iTemp
' ブックに名前の定義を追加
'(セル範囲への参照):
oBook.Names.Add Name:="tempRange", _
RefersTo:"=Sheet1!$A$1"
' ブックを保存:
oBook.SaveAs "c:\test2.xls"
' ループ内でシートをコピー。
' 最終的に次のエラーが発生する:
' 実行時エラー1004: Worksheetクラスの
' Copyメソッドが失敗しました。
For iCounter = 1 To 275
oBook.Worksheets(1).Copy After:=oBook.Worksheets(1)
Next
End Sub原因が分かっているため、解決策も確立されています。さらに、解決策がうまく機能しない場合や採用できない場合に備えて、回避策(ワークアラウンド)も用意されています。
解決策1:マクロのコードを修正して定期的に保存・再オープンする
この問題に対する基本的な解決策は、マクロのコードを編集し、シートのコピー作業中に定期的にターゲットのブックを保存して閉じ、再度開くようにすることです。これにより、エラーの発生を防ぐことができます。修正後のコード例は以下の通りです。
Sub CopySheetTest()
Dim iTemp As Integer
Dim oBook As Workbook
Dim iCounter As Integer
' 新しい空のブックを作成:
iTemp = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
Set oBook = Application.Workbooks.Add
Application.SheetsInNewWorkbook = iTemp
' ブックに名前の定義を追加
'(セル範囲への参照):
oBook.Names.Add Name:="tempRange", _
RefersTo:"=Sheet1!$A$1"
' ブックを保存:
oBook.SaveAs "c:\test2.xls"
' ループ内でシートをコピー。
' 最終的に次のエラーが発生する:
' 実行時エラー1004: Worksheetクラスの
' Copyメソッドが失敗しました。
For iCounter = 1 To 275
oBook.Worksheets(1).Copy After:=oBook.Worksheets(1)
' 回避策として以下のコードを使用:
' 100回ごとに保存・終了・再オープンする:
If iCounter Mod 100 = 0 Then
oBook.Close SaveChanges:=True
Set oBook = Nothing
Set oBook = Application.Workbooks.Open("c:\test2.xls")
End If
Next
End Subポイント: ブックを保存・終了する前に何回シートをコピーできるかは、コピー対象となるワークシートのサイズによって異なります。上記の「100回」という数値は目安であり、状況に応じて適切な値に調整してください。
解決策2:テンプレートから新しいワークシートを挿入する(回避策)
前述の解決策が使えない場合のために、もう一つの回避策も存在します。それは、既存のワークシートのコピーを作成する代わりに、テンプレートから新しいワークシートを挿入するという方法です。具体的な手順は以下の通りです。
- Excelを起動します。
- 新しいブックを作成し、含まれるすべてのワークシートのうち1枚だけを残して削除します。
- ブックを書式設定します。
- テンプレートにデフォルトで含めたいテキスト、データ、グラフなどを、残した唯一のワークシートに追加します。
- Excel 2003以前を使用している場合は、[ファイル]>[名前を付けて保存]をクリックします。Excel 2007以降の場合は、Microsoft Officeボタン(または[ファイル]タブ)をクリックし、[名前を付けて保存]を選択します。
- [ファイル名]フィールドに、テンプレートに付けたい任意の名前を入力します。
- [ファイルの種類]のドロップダウンメニューを開き、Excel 2003以前の場合は[Excel テンプレート (.xlt)]、Excel 2007以降の場合は[Excel テンプレート (.xltx)]を選択します。
- [保存]をクリックします。
テンプレートの作成が完了したら、プログラム(マクロ)から以下のようなコード行を使用して挿入できます。
Sheets.Add Type:=path\filename
注意: 上記のコードにおける path\filename の部分は、作成したシートテンプレートが保存されている場所のフルパス(ファイル名を含む完全なパス)に置き換えてください。
まとめ
Excelの実行時エラー1004は、マクロによるシートのコピー処理と名前の定義が組み合わさったときに発生しやすいエラーですが、原因と対策がはっきりしています。定期的にブックを保存・再オープンするコード修正、またはテンプレートからのシート挿入という2つの方法を覚えておけば、安心してマクロを運用できるでしょう。
-
【保存版】Excelで「エラーが発生しました」と表示される問題を解決する11の方法
インドの眼鏡ブランドLenskartの共同創業者であり、「Shark Tank India」の審査員でもあるペユーシュ・バンサル氏は、番組の中で「MS Excelなしでは自分の人生は想像できない」と語りました。これは多くの企業や個人ユーザーにも共通する考えではないでしょうか。 Excelは1987年にMac向けに初めて登場し、その後Windows版がリリースされると、瞬く間に世界トップクラスの表計算ソフトウェアへと成長しました。しかし、Windowsにはクラッシュやバグがつきもので、「申し訳ありませんが、Excelでエラーが発生しました(Were sorry but Excel has run
-
Windows 11で「Microsoft Excelを実行するのに十分なメモリがありません」エラーを解決する7つの方法
Windows 11で「Microsoft Excelを実行するのに十分なメモリがありません」というエラーが表示されて困っていませんか?このエラーは何を意味し、なぜデバイス上でExcelアプリを開けなくなってしまうのでしょうか。疑問がたくさん浮かんでいることと思います。ご安心ください。この記事では原因と対処法を詳しく解説します。Microsoft ExcelはOfficeスイートに含まれるアプリケーションの一つで、スプレッドシートの作成、データ入力、グラフやチャートの作成など、幅広い用途で活用されている人気ツールです。データの整理や財務分析を行うための、直感的で使いやすいアプリとして多くのユー