• ベストアンサー

メモリ不足にならないためには

Excel2000のVBAで起きる事なのですが、夜空をイメージし 無地の黒い背景に200個ほどの”☆”をランダムに大きさや色を変え、セル(番地も指定した範囲でランダム)に書き込み、一旦消して、また次の書き込みをするという、ループ満載の初歩的なプログラムを書きました。2,3回繰り返すとメモリ不足のメッセージが出て動かなくなります。1:このようなメモリ不足は何故おきるのでしょうか?2:これをさけるためメモリの消費量というをどのように見積もることができるのでしょうか?

noname#4342
noname#4342

質問者が選んだベストアンサー

  • ベストアンサー
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.2

うーん、何処かでメモリ漏れが起きてるんじゃないでしょうかねぇ。 恐らくVBAが動作してる間にExcelが終了してしまって、メモリリークに繋がってしまったんじゃないかと・・・ 特に、Workbook_Open()とかWorksheet_Activate()とかに無限ループを作ってしまい、ループが動いている最中に[×]ボタンで終了したりするとこのような動作になったかと思います。 解決策としては、起動時にはプログラムが走らないようにして、コマンドボタンを押したときとかに、プログラムを実行するようにすればいいでしょう。 あと、「停止ボタン」を作って、このボタンを押してから終了させるとなおエラーは減ると思います。 それ以外では、ループの最後にDoEventsを入れてみると改善されません? こんな感じ↓ Do  ループ内部のプログラム  DoEvents Loop あと、Sleep() APIを使って、ある程度の待ち時間を入れてやるといいかも。 (Genaral) (Declarations)に 'Windowsの機能の「Sleep」を呼び出せるようにする。 Private Declare Sub Sleep Lib "KERNEL32" (ByVal dwMilliseconds As Long) って行を追加しまして、 プログラム本体を Do  ループ内部のプログラム  Sleep 50 '50ミリ秒待機する  DoEvents Loop のようにします。 あと、これは関係ないかもしれませんが、Application.ScreenUpdating プロパティを使えば、マクロの実行中に画面を更新する/しない を設定することが出来ます。 描画中に画面を更新しないようにしておくと、動きが高速になりますし、画面のちらつきが発生しにくくなります。 Do  Application.ScreenUpdating = False '画面の更新をオフ  '☆を描くプログラム  Application.ScreenUpdating = True '画面の更新をオン  Sleep 50 '50ミリ秒待機する  DoEvents Loop こんな感じですか。 不明点とかがあれば、補足してみてください。

その他の回答 (1)

  • terra5
  • ベストアンサー率34% (574/1662)
回答No.1

どんなプログラムか見ないとなんとも言えませんが。 おそらく、星を一個書くごとにか何かで使ったメモリが そのまま再利用されず、次々と消費されている状況だろうと思います。

関連するQ&A

  • Office2000(Excel)メモリ不足です。

    「Excel97」で作成したマクロを「Excel2000」で実行することはできるのですが、 マクロ(VBA)を編集しようとすると、「メモリ不足」と警告され、編集ができません。そこで、メモリを64MBから128MBに増設したのですが結果は同じでした。 ちなみに、Access2000でもVBA編集画面を開こうとすると同様の警告が表示されます。128MBでも足りないのでしょうか?

  • Excel97でのメモリ不足

    下記の環境でExcel97のメモリ不足が発生し、対処方法がわからず苦慮しております。 【パソコン環境】  ・WindowsXP SP2  ・CPU Pentium4 3.4GHz  ・RAM 512MB 【現象】  ・Excel97で作成してるファイルを使用中に「メモリ不足」が発生する。  ・発生するファイルは44KB。シート3枚/ブック、シート1枚使用、使用領域は横17セル縦93セル  ・それより遥かに大きいファイル(数MB)で発生しない。  ・構造等に問題があるかと思い、新規作成ブックに値のみ貼り付けたが、それでも現象は解決しない。  ・Widowsの再起動、Officeの再インストールしても再現する。  ・同時稼動なし、バックグラウンドで動いてるソフトをシャットダウンしても再現する。 以上の現象の解決方法がお分かりになる方、回答をお待ちしております。

  • 実行時エラー7 メモリが不足しています。

    vbaでie操作をしていて、ループしているのですが strURL = objIE.Document.body.innerHTML の部分で、 「実行時エラー7 メモリが不足しています。」 と言うエラーで一時中止になりますが、 そのままF5を押すと、通過できます。 エラーではないのでしょうか? 中断すると治るエラーなのでしょうか?

  • 【Excel】【VBA】実行時エラー メモリ不足

    【Excel】【VBA】実行時エラー -'-2147467259「メモリ不足です」 win8.1 エクセル2010 メモリ8Gのスペックで VBAコードを実行しているのですが たまに 実行時エラー -'-2147467259「メモリ不足です」 となり、マクロが中断されてしまいます。 今回、実行時エラー -'-2147467259「メモリ不足です」と出たコードは rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic です。 前後のコードは省略していますが 普段は問題なく通ります。 strSQLも、中身をクエリのSQLビューに張り付けて、クエリで見てみたけど 問題なく表示されます。 なぜメモリ不足ですとなるのでしょうか? スペックが低いのですか?

  • Excel2003でメモリ不足のエラーが発生する

    Excel2003で簡単なテキストボックス+ラベルのフォームと、簡単なVBAを記述したファイルを作成しました。 しばらく使用していると、保存時や作成したフォームをVBEで開こうとする際、以下のエラーが表示されます。 「システムエラーです。: &8000FFFF(-214748113) 致命的なエラーです」 ↓ 「メモリが不足しています」 使用しているパソコンはWindowsXP SP2、メモリは1.5GBあります。 解決のため、何かアドバイスありましたらお願いします。 補足事項等いる場合、お手数ですが指摘して頂ける幸いです。

  • Excel メモリ不足です 完全に表示できません

    OS:VISTA Excel2007でVBAを使いマクロをつくり、OS:XP Excel2003での操作中に 「メモリ不足です完全に表示できません」と表示されます。 同一ブック内に「見積書」「発注書」「顧客」「業者」などのシートがあり 「見積書」「発注書」間では相互に参照しあい「顧客名」などはVLOOKUPを使用して参照しています。 「見積書」では「数式」「条件書式」多用だけでなく「印面画像」も使用しています。 マクロでは、ページ追加・削除を行います。 この操作を数回繰り返したのち画面をスクロールするとエラーになります 2007での操作ではエラーは出ませんでしたが「条件書式」が一部反映されませんでした。 倍率100%にしたり、条件書式を少なくすることは試行済みです。

  • Windows7 64bit メモリ不足

    WindowsXP Pro 32bit Cor2Duo ノートパソコンと Windows7 Pro 64bit COREi5 ノートパソコンを使っております。 WindowsXPでは、メモリ3GBで、問題なく使用しておりますが、 Windows7では、メモリ4GB搭載で、メモリが不足しているとの メッセージウインドウが頻繁に表示されます。 主な常駐ソフトは ・Noton Internet Security ・Dropbox ・iCloud そして、普段の使用状況としては、 ・ブラウザを2~3個、 ・エクスプローラーを2~3個、 ・メモ帳もしくはワードパットを1~2個、 ・2次元CADを1~2個、 ・MS Word または MS Excel、 ・iTunes、 といったソフトを同時に開くことが多いです。 明らかにメモリを多く消費しそうな 3次元CADや画像・動画を扱うソフトなどを使用する時は、 同時起動ソフトを少なくするようにしています。 64bit版では倍のメモリを消費するのでしょうか。 単純に比較はできないとしても、 目安としてWindowsXP 32bitの3GB×2=6GB すなわちWindows7 64bitでは8GB搭載すれば 問題なく使用できると考えてよいのでしょうか。 お分かりになる方宜しくお願い申し上げます。

  • Excel VBA 条件付書式の条件満たすセル取得

    Excel2010のVBAで条件付書式の条件を満たすセルの番地を取得したい 具体的には、 Excel2010のあるシートのあるセル範囲(例えばA1~XFD1048576)に 条件付き書式が付けてあって、 (例えば、数式の条件が満たされたら背景色を赤色にするなど) この条件を満たすセルに指定した書式が付けられて表示されています。 この状態で、VBAで、この条件を満たしたセルの番地を、 順番に取得したいのですが、どのように記述すればよいでしょうか。 【追記】 数式をすべてのセルに入れて検出する方法や セルをひとつずつ数式に当てはめてみていく方法は、 セルが膨大なため容量的・時間的にNGです。 このため、条件付き書式で回避しています。 条件付き書式の判定結果である書式(この場合でしたら背景色が赤色) で判断する必要があります。(書式は背景色が赤色でなくてもいいです) よく分かりませんが、検索の中の書式で指定しても、 この条件付き書式の判定結果の書式はヒットしませんでした。

  • AccessからExcelブック作成でメモリ不足

    Access97から社員マスタを基に、一人1ブックずつExcelデータをバッチで作成しています。一人ずつの処理なら問題なくできますが、400名を一度に実行すると、Excelの「メモリ不足」でハングアップしてしまいます。 Accessのフォーム上で区分を入力し、それをもとに個々にどのブックを開くか判断してOPENします。内容をセットして別名で保存しています。 一人ずつの各ループの中でExcelの起動・終了をしているのがまずいのでしょうか?

  • 再質問:Excel メモリ不足です 完全に表示できません

    http://okwave.jp/qa5374574.html こちらで同様の質問をしており、参考サイトをご紹介いただいていましたが 解決にいたらなかったためカテゴリを変えて再質問いたします。 OS:VISTA Excel2007でVBAを使いマクロをつくり、OS:XP Excel2003での操作中に 「メモリ不足です完全に表示できません」と表示されます。 同一ブック内に「見積書」「発注書」「顧客」「業者」などのシートがあり 「見積書」「発注書」間では相互に参照しあい「顧客名」などはVLOOKUPを使用して参照しています。 「見積書」では「数式」「条件書式」多用だけでなく「印面画像」も使用しています。 マクロでは、ページ追加・削除を行います。 この操作を数回繰り返したのち画面をスクロールするとエラーになります。 ファイルサイズは1メガを超えません。