- ベストアンサー
エクセルで下記の処理を行うために、どの程度のスペックでPCを構成すればよいですか?
エクセル2002を使ってデータ処理をしているのですが、 処理の途中で「リソース不足です」という表示がされ、作業がとまってしまいます。(その後実行し続けても、ほとんど「応答なし」になってしまいます。) そこで、メモリ増設、あるいは、新たなPC導入を検討しているのですが、どれくらいのスペックでCPU、メモリ等を構成すればよいのか、経験不足の為にわかりません。最高のスペックで構成する手もありますが、費用をなるべく抑えたいため、下記の処理を遂行するのにだいたいどれくらいのスペックにすればよいのか、教えていただきたいです。 作業の内容ですが、 エクセルで、縦3000~5000行、横240列分ぐらいのデータを関数で計算させたり、コピーしたり、数式貼り付け・値貼り付けをしたりする作業を、VBAのFor文などで値を変えて、何十回もぐるぐる回します。 ちなみに現在使っているPCのスペックですが、自作機で CPU Pentium4 2.41GHz メモリ 768MB DDR-SDRAM HDD 80GB (ちなみにエクセルは2002) です。 私より経験豊富な皆様のアドバイスが必要です。 ご回答よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 当面の問題点と解決案を書いておきます。 ※マクロについて これは経験がないのですが、Selection が、めまぐるしく動いているようです。時々、Selection やSelect は、なくさなくてはならない指摘をする人がいますが、それだけでは、根拠のある説明にはなっていません。 Selectionは、Excel VBAでは、汎用性がありすぎることと、特殊な環境でエラーを出すことがあること、コードが1行で済むのが、何行にも渡り無駄が生じることがあるからです。ただし、今回の問題に直接関係しているか分からないです。 しかし、 Sheets("ROR").Select Sheets("Rank").Select Sheets("MA").Select Sheets("MAK").Select としていますが、本来、Select する必要性はありませんが、今のコードでは大手術になってしまいます。直せると思いますが、実際の画面のない状態では、手探り状態になってしまい手間が掛かりそうですから、今回の修正だけしてみてください。 特に、ループの中では、 >Application.ScreenUpdating = True >Application.ScreenUpdating = False こうしたい気持ちは良く分かるのですが、なるべく避けたほうがよいです。 おそらく、シートの Select と Application.ScreenUpdating = True で、ループの中で一気に、数式の計算を清算しようとしているような気がしています。 最初で、以下のように入れたら、ループの中には入れない。 ループの外で出す。 Sub Test1() Application.ScreenUpdating = False 'Application.DisplayAlerts = False '←必要があるか分からない Application.Calculation = xlManual For .... For .... 'ループ Next Y Next X Application.Calculation = xlAutomatic Application.ScreenUpdating = False このようにしてみたら、いかがでしょうか? '-------------------------------- >間違った認識のままメモリをやたらと増設せず かなり細かい話になるのですが、Excelに関するメモリには、以下のようなものがあります。私が理解している範囲ですと、これらは、別々の割り当てのようです。多く取れるものもあれば、少なくて、すぐに底がついてしまうものとかあります。仮想メモリを使用しているのですが、あまり、私としては、この部分のシステムをいじりたくないですね。いじっても、問題になっている部分に関しては、あまり改良されないような気がします。 今回の場合は、「数式-」と「全シートの計算過程」という問題があると思います。 今回は、計算イベントを、Caluculation = xlManual で対処してみたのです。 ○ Excelで消費するメモリ ・書式設定の種類 * 数式-特に揮発性関数が、計算イベント時に使用されるメモリ ・オブジェクト類(画像などのこと) ・フォントの種類 * 全シートの計算過程で使用するメモリ ・VBAのモジュールを格納する各々のプロシージャ ・ActiveX コントロールに使用されるメモリ ・アドイン、COM、プリンタドライバ ・Excelで使われるユーティリティソフト ・外部参照で使用されるメモリ ・VRAM メモリ
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 VBAと書かれていますが、掲示板に挙げられないほどのコードではありませんか?そういうコードは、典型的なミスがあることが多いです。 もし、出来れば、コードを出してみてください。 もしそうなると、最初から、作り直したほうがよいかもしれません。 >エクセルで、縦3000~5000行、横240列分ぐらいのデータを関数で計算させたり、コピーしたり、数式貼り付け・値貼り付けをしたりする作業を、VBAのFor文などで値を変えて、何十回もぐるぐる回します。 ループの中で、オブジェクトの設定(Set aaa =....) は、してはいませんか? それと、解放せずに、どんどん重ねてしまうと「リソース不足」になります。 簡単なVBAのチェックは、プロシージャのひとつは、100行程度までに留めることです。それ以上は、なんらかに問題を抱えていることが多いです。 >データを関数で計算させたり、コピーしたり データを計算というのはよいのですが、マクロの中で、数式がまとめられていないとトラブルを起こします。よほど自己流の人しか、そのようなことにはならないのですが、一度だけ、そういう相談を受けたことがあります。 VBE の数式が、常に、ワークシートとの関連性をチェックし始めますので、それだけでメモリの消費量がバカになりません。 誤解している方が多いのですが、Excelのメモリというのは、PCの物理的なスペックとは別です。それだけに、いくらメモリを積んでも直接は解決しません。それと、Excelの場合は、OSに依存するよりも、遥かに、ソフトのバージョンの影響が強いです。しかし、Excel2002は、基本的には、昔のものよりも改善されていますので、もう、その部分では、基本的なメモリの問題は発生しないと考えてよいです。
お礼
ご回答ありがとうございます。 コードは下記の通り、至ってシンプルなものです。 Sub Test1() Application.ScreenUpdating = False Application.DisplayAlerts = False Sheets("ROR").Select '既存データ消去 Range("HW6:IB65536").ClearContents For X = 10 To 30 Step 10 For Y = 5 To 20 Step 5 Sheets("ROR").Select Range("HW2").Value = X Range("HY2").Value = Y Sheets("MA").Select Range("B6:HR6").Copy Range("B7").Select Range(Selection, Selection.End(xlDown)).Select Selection.PasteSpecial Paste:=xlPasteFormulas Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Sheets("MAK").Select Range("B6:HR6").Copy Range("B7").Select Range(Selection, Selection.End(xlDown)).Select Selection.PasteSpecial Paste:=xlPasteFormulas Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Sheets("Rank").Select Range("B6:HR6").Copy Range("B7").Select Range(Selection, Selection.End(xlDown)).Select Selection.PasteSpecial Paste:=xlPasteFormulas Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Sheets("ROR").Select Range("B6:HU6").Copy Range("B7").Select Range(Selection, Selection.End(xlDown)).Select Selection.PasteSpecial Paste:=xlPasteFormulas Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Application.Goto Reference:="Result" Selection.Copy Range("HW65536").Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues Application.ScreenUpdating = True Application.ScreenUpdating = False Next Y Next X End Sub よろしくお願いします。
補足
文字数の制限があったため、再度投稿することになりました。 >誤解している方が多いのですが、Excelのメモリというのは、PCの物理的なスペックとは別です。それだけに、いくらメモリを積んでも直接は解決しません。それと、Excelの場合は、OSに依存するよりも、遥かに、ソフトのバージョンの影響が強いです。しかし、Excel2002は、基本的には、昔のものよりも改善されていますので、もう、その部分では、基本的なメモリの問題は発生しないと考えてよいです。 そうなんですね。間違った認識のままメモリをやたらと増設せずにすみました。感謝します。
- popesyu
- ベストアンサー率36% (1782/4883)
OSが98、MEではないのにリソース不足と出る場合は、メモリリークしているとか、常駐アプリや環境依存の問題。マシンパワーで解決するものではないです。 http://www.geocities.jp/le_grand_concierge/_geo_contents_/WinXPSystemResources/WinXPSystemResources.htm
お礼
ご回答ありがとうございます。 いただいたアドバイス参考にさせていただきます。
お礼
ご回答ありがとうございます。 Wendy02さんのアドバイスを参考にさせていただき、 試行錯誤してマクロを改良してやると、時間はかかるものの、処理を完遂することができました。 この度は、 ご丁寧に細かいところまでご指導いただき、感謝です。 ありがとうございました!!