- ベストアンサー
Excelメモリ不足で完全に表示できない問題の解決方法
- OS: Vista Excel2007でVBAを使いマクロを作成し、OS: XP Excel2003で操作中に「メモリ不足です完全に表示できません」と表示される問題について質問しています。
- 質問者は同一ブック内に「見積書」「発注書」「顧客」「業者」などのシートがあり、相互に参照しあう設計になっています。また、数式や条件書式、印面画像の使用があり、マクロではページ追加・削除を行っています。
- 数回の操作の後に画面をスクロールするとエラーが発生し、ファイルサイズは1メガを超えていません。解決策が見つからず、再度質問することになりました。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 私は、前の質問を読んで書きかけていたのですが、アップロードをやめてしまいました。もちろん、他の方の回答は読んだ上ですが、物理的な問題ではありません。VBAの上位互換はだいたいは通るのですが、下位互換っていうのは、ないと思ったほうがよいです。 VBAの開発の長いの経験のある人なら知っていることですが、下位バージョンが手元にない場合は、下位バージョンのソフトウェアを、高いお金を出しても購入しなくてはならないことがあります。 そのようなお話の場合は、原因は、メモリリークに他ならないと思いますが、オブジェクトの部分を点検したほうがよいですね。同じ名前の、新しいオブジェクトと従来のオブジェクトのマッチングが、うまくいっていないのだろうと思います。 そこで、私が、まずお勧めすることは、Excel 2003 用には、ブックを新規から作ってみることです。上位に上げる場合はあまり必要ないのですが、シートは、上位バージョンからセルを全部コピーして、下位バージョンにセルに貼り付け。コードは、VBE側のプロジェクト・エクスプローラから、エクスポートとインポートをしてみることです。
その他の回答 (5)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 そのままになっているというのは、うまく行かなかったか、とてもじゃないけれども、下位バージョンで、CSVインポートなど出来ないということかもしれません。もし、そうでしたら、Excel 2007 側のデータで、バイナリやバイナリエラーデータになる不要成分(見えない文字か?記号、外字、オブジェクトなど)を探すしかないと思います。しかし、あまり良い案だとはいえませんが。
お礼
ご親切なアドバイスに深く感謝しております。 質問させていただいたマクロの解決以上の成果があったと感じています。 ありがとうございました。
補足
For Each myShape In ActiveSheet.Shapes myShape.Delete Next 実際の対象範囲は限定していますが、メモリ不足の初期段階で上記のようなコードで画像を削除していました。 また、ほとんどが「列項目固定」の表形式のシートではなく「見積書」のような単票物であったため、アドバイスいただきながらCSVは試していませんでした。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >(3) (1)の左上隅をクリックしコピー、(2)の左上隅をクリックし貼り付け。 >(3)を全シート分実行しましたが、大きな勘違いでしたでしょうか。 後で考えたけれども、普通、それしかないですよね。他にも、オートメーション・オブジェクト--CreateObject で単独に開いて、二つのExcelをあける方法もあります。いすれにしても、場合によっては不要成分までコピーする可能性が高いです。むろん、これは私の想像ですが。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 なかなか、核心には到達しないのですが、私も手探り状態です。一応、最後の切り札です。(また、他のアイデアが出るかもしれませんが) >(2)2007の全てのシートの全てのセルをコピーし新規ブックへ貼り付け。 これをどうやってするのか良く分かりません。Excel 2007 と Excel 2003 は、同時に開けられないとは思います。一旦、Excel 2007 を閉じて、Excel 2003 を開けるのでしょうか。もし、そうだとすると、その時、不要な成分をコピーしているという可能性もあります。 その現象自体は、「メモリーリーク」というものですが、昔々、同じ現象があったときに、バイナリファイルの中に、特殊文字(昔は、IBM特殊コードや一太郎の外字)が入ったりすると、起こるといわれました。本来、Excel 2007には入りようがないはずですが、バイナリにしたら、なんともいえません。そこで、昔のサポートでは、Sylkファイルや、CSVにしてデータを出力して、それを新規のファイルにすると、直ると言われました。もちろん、CSVにしてしまったら、書式も数式もなくなってしまいますから、大手術になってしまいます。それでも、データは残るから仕方がないかというところです。 実際に、問題が発生したブックをバイナリエディタで中身を見ると、まったく関係のないデータが入っていることを見たことがあります。一体、どうして入り込むのか分かりません。Excelファイルの脆弱性ということで、サポートにも出ていたように思います。 それと、そういう中で生まれた関数が、Clean関数というものだそうです。これも、古い話で、バイナリデータ(本当は、エスケープシーケンス)を取り去る関数です。昔は、エスケープシーケンスで、印刷の命令を書いていたからですが、それを不要なバイナリデータを削除するにも使用していたようです。ですが、必ずしもワークシートの表面に不要成分が存在しているわけではないので、それで確実に取れるとは思えません。
補足
(1) 問題のブックを2003で開く。 (2) ファイル>新規作成で新規bookを作る。 (3) (1)の左上隅をクリックしコピー、(2)の左上隅をクリックし貼り付け。 (3)を全シート分実行しましたが、大きな勘違いでしたでしょうか。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 マクロがない状態で、メモリ不足が出てくる、ということですが、片方のXP側のプログラムファイルや設定ファイルが壊れている可能性をまず疑いますね。特に、 C:\Documents and Settings\<ユーザー名>\Application Data\Microsoft\Excel\*.xlb や C:\Documents and Settings\<ユーザ名>\Application Data\Microsoft\Excel\StartUp\PERSONAL.XLS などに問題が発生していることが多いです。一度、これらを探して、一度、名前を換えて、移動してみたらどうでしょうか。また、\StartUp\フォルダの中は、空にしてみたらどうでしょうか。このフォルダは、異物があると誤動作します。 その後に、念のために、ヘルプからアプリケーションの修復をしてみるとかどうでしょうか。
お礼
毎回ご丁寧な回答に感謝しています。 遅くなりましたが、試してみました。 (1)Excel\*.xlb:移動して\Excel内を空にして実行 メモリー不足:発生しました。 *.xlb:自動生成されていた。 (2)\Excel\StartUp\PERSONAL.XLS :もともとありませんでした。 (3)アプリケーションの修復:インストールが始まりそうなので中止ししました。 (1)(2)とも複数PCで確認しましたが、同じ結果でした。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 返事をつけるのが遅くなりました。 >>「同じ名前の、新しいオブジェクトと従来のオブジェクトのマッチングが、うまくいって>>いないのだろう。」 >VBAの経験が浅く、この部分がまず理解できませんでした。どのような状態を想像すればよ>ろしいでしょうか。 この意味なのですが、私自身は、詳しい資料を覚えたわけでもないし、Office 2007 の開発では、別な事情が絡んで、投げ出したくなったことぐらいの経験しかありません。 ブック自体をいくらOffice 2003形式で保存しても、下位バージョンに設定させると、上位で使われていたオブジェクトやそれを動かす、VBAのコンポーネントに結びついたVBAのモジュール(バイナリ)が違うので、トラブルを起こすことがあります。特に、プロパティに多いようです。プロパティを省略すればよいと思うかもしれませんが、そうではないようです。 Office 2007 は、互換性の資料(マイグレーションと言います)はざっとしか読んだ覚えがないのですが、同じ名前の、おそらくは違う種類のオブジェクトがあるようです。たとえば、"Table"というオブジェクト(概念)が上位バージョンでは、もっと頻繁に現れています。 下位から上位に対しては、それがなくても、使わないというだけで済むのですが、上位から下位は、そういうわけにはいかないようです。たとえ話で恐縮ですが、同じ入り口から入っても、誘導してくれれば、違う出口には出られるように作られているのですが、逆からは、元の入り口には誘導してくれないので出られないということです。 実は、ここの掲示板で書いていて、私個人は、あまり、この点で追いかけていないのです。 理由は、甘さの残るコードは、下位ではトラブルが起こらないけれども、上位では、トラブルを起こすという原則的なものがあるので、きちんとして書いたものには、コード(テキストベース)では、問題は少ないという考えからです。 そこで、今回、私が、お勧めしたのは、ブックという元になるオブジェクトは新規で、データやVBAのコードだけを移植したらどうか、ということです。 資料: Review migration issues for the 2007 Office system (機械翻訳がついています) http://www.microsoft.com/japan/technet/prodtechnol/office/ork/library/377a9113-b8bb-498c-a846-26759c5dac15.mspx?mfr=true ただ、今回、大幅な改編のために、Microsoft 側は、"Microsoft Office Migration Planning Manager(OMPM)というツールを作ったので、詳しい資料が今回ないような気がします。 Office 2007 Migration and Application Compatibility(フォーラム) http://social.technet.microsoft.com/Forums/ja-JP/office2007deploymentcompatibility/threads (英語)
お礼
ご丁寧なご回答に感謝しております。 下のような対応をしましたが「メモリ不足」が出てしまいました。 一旦今回の方法を破棄し別の方法を模索してみます。 (というか知識・経験が乏しいため諦めています) ありがとうございました。 (1)Excel2003でBOOKを新規作成。 (2)2007の全てのシートの全てのセルをコピーし新規ブックへ貼り付け。 マクロは2007からエクスポートしていましたがインポート前のマクロがない(2)状態で新規ブックをスクロールしてみたことろ「メモリ不足」が出てしまいました。
補足
もう誰からも回答をいただけないものとあきらめていました。 ご回答いただいただけで、感謝の気持ちでいっぱいです。 お礼を言いながらあつかましいのですが、 「同じ名前の、新しいオブジェクトと従来のオブジェクトのマッチングが、うまくいっていないのだろう。」 VBAの経験が浅く、この部分がまず理解できませんでした。どのような状態を想像すればよろしいでしょうか。