現象
Excel 2010 で既存の .xls 形式のファイルを開き保存を行うと、エラーが発生して正常に保存できない場合があります。ファイルの状態によって、以下のような状況となります。
-
Excel 2010 が異常終了して保存できない。
-
以下のエラーメッセージが表示されて保存できない。
Microsoft Excel
'ファイル名' の保存中にエラーが検出されました。いくつかの機能を削除または修復することにより、ファイルを保存できる場合があります。新しいファイルで修復を実行するには、[続行] をクリックしてください。ファイルの保存を中止するには、[キャンセル] をクリックしてください。
続行 キャンセル
このメッセージに対して [続行] を選択すると [名前を付けて保存] ダイアログが表示されますが、別名を指定しても 「ファイルを保存できませんでした」というメッセージが表示されて保存できません。
原因
Excel ファイルに図形が大量に含まれている場合、これらの現象が発生することを確認しています。
現象が発生するファイルの特徴として、大量に含まれている図形の大半で、高さと幅のどちらか、もしくはその両方のサイズが 0 に設定されています。また、図形が大量に含まれていることで、ファイルを開いたり保存したりする処理に時間がかかり、ファイルサイズも大きくなっています。
回避策
Excel ファイルに含まれている、高さと幅が 0 に設定された不要な図形を削除してから、ファイルを保存します。この操作により、不要な情報が削除されるため、本現象の回避の他、ファイルサイズの削減とファイルを開いたり保存したりする処理時間が短縮される効果が見られる場合もあります。
以下は、VBA コードを使用して高さと幅が 0 に設定された図形の数を確認、もしくは削除を行う場合のサンプルコードと手順です。
-
Excel 2010 を起動します。
-
Alt + F11 キーを押下して Visual Basic Editor を開きます。
-
イミディエイト ウィンドウが表示されていない場合、Ctrl + G キーを押下してイミディエイト ウィンドウを表示します。
-
Visual Basic Editor の [挿入] メニューから [標準モジュール] をクリックします。
-
以下のコードをコピーして標準モジュール内に貼りつけます。
Sub ShapeCheck()
Dim oSheet As Object
Dim oShape As Object
Dim iCount As Long
iCount = 0
For Each oSheet In ActiveWorkbook.Sheets
For Each oShape In oSheet.Shapes
If oShape.Width = 0 And oShape.Height = 0 Then
iCount = iCount + 1
'oShape.Delete '図形の削除を行う場合はこの行のコメントを削除して実行します。
End If
Next oShape
Next oSheet
Debug.Print iCount
End Sub
-
Excel 画面の Office ボタンから [開く] メニューを選択し、問題が発生するファイルを開きます。
-
Visual Basic Editor で F5 キーを押下して、貼りつけたコードを実行します。
-
Visual Basic Editor のイミディエイト ウィンドウにファイルに含まれる、高さと幅が 0 の図形の数が表示されます。この数が数百を超えるなど意図しない状態になっている場合は、このような図形を削除することにより現象を回避できる可能性があるため、次の手順に進みます。
-
貼りつけたコードのコメント ブロックされている行の先頭のアポストロフィ (') を削除し、コメント ブロックを解除します。
-
F5 キーを押下して、貼りつけたコードを実行します。
-
実行が完了したら、当該ファイルを別名で保存します。
-
Excel を終了します。コードを貼りつけた新規 Excel ファイルは必要に応じて .xls 形式や .xlsm 形式などのマクロ保存が可能なファイル形式で保存します。
-
別名で保存した当該ファイルを開いた後、ファイル保存操作を行い、Excel が異常終了しなくなることを確認します。
状況
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。