
Excel2003です。
いつも大変お世話になっております。
以前、
大量のグラフ(項目数50のグラフを30個以上)
などを作った際にエラーが出て、
ブックを閉じることも、デバックをキャンセルすることも
保存することも出来なくなったことがありました。
今後二度とこのようなことが無いようにしたいのですが、
何が原因でしょうか?
原因の特定のため、
拾ってきたマクロを実行しました。
Sub Sample1()
Dim n As Long, msg As String
n = Application.MemoryTotal
msg = msg & "Excelが使用できるメモリの総容量:" & Format(n / 1024, "#,##0") & "KB" & vbCrLf
n = Application.MemoryUsed
msg = msg & "Excelが使用しているメモリの総容量:" & Format(n / 1024, "#,##0") & "KB" & vbCrLf
n = Application.MemoryFree
msg = msg & "Excelが使用できるメモリの空き容量:" & Format(n / 1024, "#,##0") & "KB"
MsgBox msg
End Sub
実行したところ、
「使用できるメモリ総量:5,256KB
使用してるメモリ総量:4,232KB
使用できるメモリ空き:1,024KB」
と表示されました。
メモリ空きは少しありますが、
残り20%以下しかありません。
これが普通でしょうか?
メモリ解放方法や、何かメモリをあまり使わないようにする為に
見るポイントなどありましたら教えてください。
よろしくお願い致します!
No.3ベストアンサー
- 回答日時:
satoron666 さん
こんにちは。
メモリは結構あるので大きなプログラムを作っても大丈夫です。
パソコン(Windows)はメモリに余裕があってもリソース・メモリの方が影響が大きです。
http://www5.plala.or.jp/vaio0630/win/resource.htm
・オブジェクト(データベースのアクセス用のADO、グラフ等のChartObjects等々)
・グラフィック用のリソース
等々が問題になることが多いです。
今回はグラフの図形、グラフオブジェクトの両方を大量に使っているのが問題なように思えます。
私は昔、次の方法(グラフを画像化に変換)でプログラム対応をしました。
注)昔作成したソースそのままなので、分かりにくいですがヒントになればと思います。
ActiveSheet.ChartObjects("業種月別グラフ").Chart.CopyPicture _
Appearance:=xlPrinter, Size:=xlScreen, Format:=xlPicture
複写シート.Select
ActiveSheet.Pictures.Paste.Select
Selection.Name = "グラフ" & NO
With ActiveSheet.Shapes("グラフ" & NO)
.Shadow.Type = msoShadow6
.Left = Range("A3").Left + ((NO - 1) Mod 4) * .Width
.Top = Range("A3").Top + Int((NO - 1) / 4) * .Height
End With
:
ちなみにNo.1の方には申し訳ありませんが「LongをIntegerに変えるだけで半分」は
間違いではありませんが、メモリにはほとんど影響がないかと思います。
理由:使用できるメモリ空き:1,024KB とのことですが、Longを100個確保しても
100×4バイト=400バイト 1KBの半分程度なので1,024KBの0.05%です。
※Integerは200バイトになりますのでLongより0.025%減る程度です。
また計算速度ですが、最近CPUが32ビットや64ビットになっているのでLongの方が
早くなっているようだし大きな数値も扱えるのでオススメです。
話は遠回りしましたが、グラフを少なくしたり、グラフオブジェクトを減らしたり…等々
色々工夫して対応するしかないかと思います。
ご検討ください。
この回答への補足
回答ありがとうございます。
グラフが原因でしたか…
画像化するにあたり、
グラフの位置を読み取り、
その上に画像を載せた後
グラフを全消去という方式にしたいと思っています。
グラフにし終わった段階で画像化したら
早いですかね…
とりあえず、方法を考えてみたいと思います!
回答ありがとうございました!
違うタイトルで再度質問したいと思います。
また、図として貼り付けるのを試してみましたが
速度が遅くなるため使うのを避けたいところです…
画像は、保存する場所が無いため、避けたいです。
上記のことを考慮し、
良いプログラムを作れればなと思います!
ありがとうございました!
No.2
- 回答日時:
50項目を30もグラフ処理した事がないのでわかりませんが、グラフ20個ではどうですか?。
10個ではどうですか?5個ではどうですか?。簡単なシステムチェックです。数を大きく減らしてもダメとなると項目数が多いのか、1項目の大きさが多きすぎるのかです。また、マクロを組まれている場合、Redimでワークをとっている場合、Eraceしないとメモリ解放されません。使うたびにメモリ消費しているのではないですか?。
あるいは、別プログラムがやたらと立ち上がっているとか。
この回答への補足
回答ありがとうございます。
グラフの表示個数が増えると、
使っているメモリが減ります(たぶん)
空きメモリの容量は何故か減りませんが…
グラフの個数は減らせないです。
Redimも使っていません。
でも、グラフが原因かもと分かってよかったです!
No.1
- 回答日時:
まずは、型の見直しから
たとえば、LongをIntegerに変えるだけで半分になりますよね。
計算途中でLongの精度が必要な場合は計算のみLongで行い、計算結果はIntegerに格納
配列ばど、たくさんのメモリを消費する宣言は、
各関数の内部で宣言する。
※使用するときだけ宣言する
VB系は関数を抜けると解放します。
参考URL:http://www.nda.co.jp/memo/dim.html
この回答への補足
回答ありがとうございます。
型を全てLong→Integerに変更してみましたが、
メモリ使用容量は全く変わりませんでした。
うーん、なぜなのでしょうかね…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- iPhone(アイフォーン) iCloudのデータをiPhoneメモリに移動したい 1 2022/10/24 22:11
- Excel(エクセル) Excel-VBAの「しばらくお待ちください」のダイアログが自動的に閉じない 2 2023/05/24 15:31
- Excel(エクセル) エクセルVBA Msgboxでの変数の活用 4 2023/07/23 08:33
- CPU・メモリ・マザーボード Windows11アップデート後の不具合(メモリ不足)について 9 2023/01/04 11:34
- Android(アンドロイド) galaxy s8+にUSBメモリ(type-c)を接続し、動画再生すると熱くなるのですが… USB 5 2022/06/24 17:21
- デスクトップパソコン intel hdグラフィックス3000 4 2022/10/03 14:14
- Android(アンドロイド) 128GB LAZOS マイクロSDカード 1280円 もっと良い商品ある? 4 2023/02/07 19:42
- ドライブ・ストレージ USBメモリ。信頼できるUSBメモリ容量は何ギガまで? 7 2022/04/14 07:31
- CPU・メモリ・マザーボード メモリが使用可能にならない 3 2022/08/13 17:13
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windowsメモリ診断の結果の通知...
-
パソコンがウイルス感染してい...
-
メモリ増設・Win11アップデート...
-
Memtest86+でメモリの動作確認...
-
SoftBank 740SC 初期化
-
妹の家のパソコンが壊れました
-
Windows11のノートパソコンを中...
-
クリップボードでエラー
-
自作PCが起動しません。
-
大学用のノートパソコンを探し...
-
NEC QXシリーズのmibについて
-
PCとは、メモリ無しでBIOS,PO...
-
メモリ 両面実装と片面実装の違...
-
3DCGに興味があり、新しくPCを...
-
メモリーの種類
-
メモリ1GB4枚と2GB2枚消費電力は?
-
EXCELのVBAで作業ファイルを閉...
-
USBメモリの使用履歴について
-
ブラウザーを立ち上げているだ...
-
メモリがメモリスロットにロッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
妹の家のパソコンが壊れました
-
Windowsメモリ診断の結果の通知...
-
大学用のノートパソコンを探し...
-
メモリーの種類
-
PCとは、メモリ無しでBIOS,PO...
-
メモリのハードウェア予約済み...
-
システムビデオメモリ0
-
EXCELのVBAで作業ファイルを閉...
-
メモリの性能はなぜ倍数なの?
-
メモリーのPC2-6400とPC2-6400U...
-
ブラウザーを立ち上げているだ...
-
USBメモリの使用履歴について
-
データを移動させる時のバッフ...
-
メモリ 両面実装と片面実装の違...
-
Memtest86+でメモリの動作確認...
-
メモリ診断ツールによるハード...
-
メモリの挿す順序
-
FDDユニットの接続方法
-
NEC QXシリーズのmibについて
-
メモリ容量UPで、逆にCPU負荷が...
おすすめ情報