アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセル2002を使ってデータ処理をしているのですが、
処理の途中で「リソース不足です」という表示がされ、作業がとまってしまいます。(その後実行し続けても、ほとんど「応答なし」になってしまいます。)

そこで、メモリ増設、あるいは、新たなPC導入を検討しているのですが、どれくらいのスペックでCPU、メモリ等を構成すればよいのか、経験不足の為にわかりません。最高のスペックで構成する手もありますが、費用をなるべく抑えたいため、下記の処理を遂行するのにだいたいどれくらいのスペックにすればよいのか、教えていただきたいです。

作業の内容ですが、
エクセルで、縦3000~5000行、横240列分ぐらいのデータを関数で計算させたり、コピーしたり、数式貼り付け・値貼り付けをしたりする作業を、VBAのFor文などで値を変えて、何十回もぐるぐる回します。


ちなみに現在使っているPCのスペックですが、自作機で
CPU  Pentium4  2.41GHz
メモリ  768MB DDR-SDRAM
HDD  80GB
(ちなみにエクセルは2002)
です。

私より経験豊富な皆様のアドバイスが必要です。
ご回答よろしくお願いします。

A 回答 (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 メモリ
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

Wendy02さんのアドバイスを参考にさせていただき、
試行錯誤してマクロを改良してやると、時間はかかるものの、処理を完遂することができました。

この度は、
ご丁寧に細かいところまでご指導いただき、感謝です。
ありがとうございました!!

お礼日時:2007/08/06 20:04

こんばんは。



VBAと書かれていますが、掲示板に挙げられないほどのコードではありませんか?そういうコードは、典型的なミスがあることが多いです。
もし、出来れば、コードを出してみてください。

もしそうなると、最初から、作り直したほうがよいかもしれません。

>エクセルで、縦3000~5000行、横240列分ぐらいのデータを関数で計算させたり、コピーしたり、数式貼り付け・値貼り付けをしたりする作業を、VBAのFor文などで値を変えて、何十回もぐるぐる回します。

ループの中で、オブジェクトの設定(Set aaa =....) は、してはいませんか?
それと、解放せずに、どんどん重ねてしまうと「リソース不足」になります。

簡単なVBAのチェックは、プロシージャのひとつは、100行程度までに留めることです。それ以上は、なんらかに問題を抱えていることが多いです。

>データを関数で計算させたり、コピーしたり

データを計算というのはよいのですが、マクロの中で、数式がまとめられていないとトラブルを起こします。よほど自己流の人しか、そのようなことにはならないのですが、一度だけ、そういう相談を受けたことがあります。

VBE の数式が、常に、ワークシートとの関連性をチェックし始めますので、それだけでメモリの消費量がバカになりません。

誤解している方が多いのですが、Excelのメモリというのは、PCの物理的なスペックとは別です。それだけに、いくらメモリを積んでも直接は解決しません。それと、Excelの場合は、OSに依存するよりも、遥かに、ソフトのバージョンの影響が強いです。しかし、Excel2002は、基本的には、昔のものよりも改善されていますので、もう、その部分では、基本的なメモリの問題は発生しないと考えてよいです。

この回答への補足

文字数の制限があったため、再度投稿することになりました。

>誤解している方が多いのですが、Excelのメモリというのは、PCの物理的なスペックとは別です。それだけに、いくらメモリを積んでも直接は解決しません。それと、Excelの場合は、OSに依存するよりも、遥かに、ソフトのバージョンの影響が強いです。しかし、Excel2002は、基本的には、昔のものよりも改善されていますので、もう、その部分では、基本的なメモリの問題は発生しないと考えてよいです。

そうなんですね。間違った認識のままメモリをやたらと増設せずにすみました。感謝します。

補足日時:2007/08/05 00:56
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
コードは下記の通り、至ってシンプルなものです。

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

よろしくお願いします。

お礼日時:2007/08/05 00:56

OSが98、MEではないのにリソース不足と出る場合は、メモリリークしているとか、常駐アプリや環境依存の問題。

マシンパワーで解決するものではないです。
http://www.geocities.jp/le_grand_concierge/_geo_ …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
いただいたアドバイス参考にさせていただきます。

お礼日時:2007/08/05 01:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!