Excelのファイルが開かない
Excelのデータが大きくなりすぎて開かない場合に有効かもしれない話です。
※ただし難易度高め。
事の始まり
関数の入った行をオートフィルするとき、ミスって1048576(最終行)まで行ってしまいました。
それを気にせずそのまま上書き保存してから閉じてしまいます。
休憩から戻って、次に開こうとしたら…。だいぶ待ってから「リソース不足のため、このタスクを完了することができません。」とか出て開きません。
えぇーっ!?リソース不足って何が!?
って思って、Excelファイルのプロパティを見てみたら、作業前は131 KB (134,495 バイト)だったはずのファイルサイズが23.8 MB (25,043,344 バイト)になっているではありませんか…。
でも24メガやろ?何でリソース不足とかって思って、タスクマネージャーでExcelのプロセス見ながら再度開こうとしてみました。
そしたらExcelのメモリ使用量が24MBどころかみるみる増大していきます…。
最終的に1800MB前後に達した時点で、先ほどの「リソース不足の…」が表示されてExcelが死にます。
いや一応メモリ8GB積んでるのにとか思いつつも、別のプロセスを終了させたりもしましたが、何度やっても状況は変わりません。
ところで
実はこうなる前の時点で途中で作りかけのExcelファイルを念のため保存してありました。
そのファイルも既にデータサイズが11.9 MB (12,580,464 バイト)ありましたが、これはなんとか開くことができました。
そのときのメモリ使用量を見ていると、読み込み中に一度1000MBを少し超えて、開いた後に980MB前後に落ち着きました。
ここで、察しの良い方はお気づきになられたかもしれません。
理由はともかく、メモリ使用量が2GBを超えた可能性があるのでした。
ちなみに理由は明白です。
1048576行分の計算を行っているためです。
メモリ8GB積んでいるのに、なんで2GBを超えた可能性とか言ってんの?と思うでしょう。
実は32bitアプリケーションはメモリを約2GBまでしか扱うことができません。
OSは普通のWindows10なので64bit版です。
ですから4GB以上のメモリを認識して扱うことができます。
計算式の入ったExcelファイルは、開くときに一連の計算を行います。
このためミスって増えた数式の計算を行う際に使用メモリが上限に達してもなお計算が終わらず「リソース不足の…」になったと想像しました。
なんとか開けた11.9 MBのExcelファイルで、試しにミスった不要行を一掃してみたところ、118 KB (121,430 バイト)になりました。
これはもしかしたら、開かないヤツを開くことができて不要行を一掃できたら最善の状態になるのではと思えてきましたが、開かない理由がExcelが32bitアプリケーションだからどうしようもありません。
アドオンの互換性の問題から通常Microsoft Officeは、64bitのWindowsであっても32bitのアプリケーションとしてインストールされます。
ならば64bitのMicrosoft Officeをインストールしよう!
Microsoft Officeのインストールメディアには64bit版が用意されており、手動で選択することで64bit版のMicrosoft Officeをインストールすることができるのです。
しかし、Windowsを32bit版から64bit版に変更するのと同じように、直接はできず再インストールをする必要があります。
再インストールも上書きインストールではなく、一度アンインストールしなければいけません。
Windowsの場合は初期化(データをすべて消去)して、64bit版を新たにインストールする必要があります。
で、64bit版のExcelで読み込んだところ開くことができたので、不要行を一掃して無事解決したのでした。
今回はサードパーティ製のアドオンなどは一切使用していない環境でしたのでこのような奥の手?で解決しましたが、アドオンが使用されている環境では解決しないどころか別の問題を引き起こす可能性もありますので、なさる場合はあらかじめ確認されることをおすすめいたします。
その後
オープンソース系のOfficeソフトの64bit版で開かないかと思い調べてみると、
OpenOfficeはWindows版は32bit版しかありませんでしたが、LibreOfficeでは64bit版が用意されていました。
試しにインストールして例のファイルを読み込んでみると、8GBのメモリをほぼ使い切る形で5分くらいしてからようやく開くことができました。
というか一応開きましたので、不要行を削除してから上書き保存をして、Excelで開きなおしてみたところ無事開くことができました。
ただ、やはりと言うかおかしくなっているセルもありました。
セルというか列、というかミスってた列、が根こそぎおかしくなってた。
LibreOfficeで読み込んだからおかしくなったのかどうかは定かではありませんが、今回の場合は大半のデータは回収できたので、こちらの方法もアリかもしれません。
ちなみに64bit版Excelで修正した方は、ほぼ満足の結果でした。
というわけで
データが大きくなりすぎてExcelファイルが開かない場合、64bit版のExcelで開いて修正を試みることができるかもしれない、という話でした。