• ベストアンサー

EXCELのVBAで作業ファイルを閉じてもメモリの解放をしなくて困っています

いろいろネットで調べてみたのですが、わからなかったので お願いします。 EXCEL2003のVBAで作業ブックを作り、色々計算した 結果を1つのシートにまとめ、結果シートを新たに作ったブックに コピーします。 その後、作業ブックは保存せずに閉じるのですが、作業ブックで 増えたメモリがブックを閉じても減りません。 自分が調べた限りでは、こういう事例はありませんでした。 作業ブックを閉じても、作業ブックのメモリは解放されないもの なんでしょうか。 どんどん、メモリが増えたままになって困っております。 なんせ、初心者なので、いまひとつわかっておりません。 よろしくお願いいたします。

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

  • ベストアンサー
回答No.1

コードがないので、良くわかりませんが、 タスクマネージャーを見ながら一行ずつデバッグすると どこでプロセスが起動して終了しているのかがわかるはずです。 以下、参考になるかわかりませんがHPを・・・。

参考URL:
http://homepage1.nifty.com/rucio/main/technique/teq_15.htm
cometa
質問者

お礼

早速の返答ありがとうございます。 しかしながら、参考のHPがちんぷんかんぷんです。 (すみません。日曜大工的にVBAを独学でやって いますので) HPのどこがわからないかが分からない状態ですので、 とりあえず、このHPを2、3日かけてじっくり がんばって理解します。 わかり次第また連絡致します。 ありがとうございました。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

#3 の補足です。 >自分が調べた限りでは、こういう事例はありませんでした。 >作業ブックを閉じても、作業ブックのメモリは解放されないもの >なんでしょうか。 >どんどん、メモリが増えたままになって困っております。 メモリが開放されないのではなくて、単に、メモリの量が増えているのではないでしょうか?それは、#3で述べた、メモリ枠の限界まで、使用した量は確実に増えていきます。それは、しかたがありませんし、それを気にしてもどうしようもありません。 要するに、Excelのアプリケーションを終了して残るか、残らないかだけです。それを確認してください。

cometa
質問者

お礼

早速の返答ありがとうございます。 excelのアプリケーションを終了させれば メモリは解放されます。ということは どうしようもないという結論もあるということですね。 すみません、setステートメントも よく理解していない者ですので、 このあたりの解放方法を探ってみます。 コードについてはどのあたりがあやしいという 見当がつかないので、見当がつき次第 また連絡します。 ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 通常、単独で使っている分にはありません。COMやオートメーションサーバーで用いなければ、そのようなことはありません。単独でExcelを使用する場合、あらかじめ、Excel側がメモリの枠を取ってから、VBAなどが使われますので、本体、Application が終わると、残らないようになっています。つまり、本体自体が終わっていないということになるかもしれません。 個々のプロセスが残るのは、.Net で、別に、COM開放プログラムが必要です。 言葉だけで、回答者に想像させても、限界があります。とにかくコードを見せてください。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

Set (オブジェクト)=Nothing を入れるべきところに入れてないのでは。 http://www.moug.net/tech/exvba/0150027.htm を参考に。

cometa
質問者

お礼

早速の返答ありがとうございます。 setステートメントの意味がいまひとつ 理解できておりません。 すみません。setをもう少し勉強します。 理解できたらまた連絡します。 ありがとうございました。

関連するQ&A

  • EXCEL VBA(作業グループの解除)

    EXCEL VBAについての質問です。 複数のシートをコピーして別ブックに保存した後、元のブックが作業グループになってしまいます。 これを解除するコードを伝授いただけませんでしょうか? Sheets(Array("1", "2", "3")).Select Sheets(Array("1", "2", "3")).Copy

  • エクセルVBAについて

    <sheet1>フォーマット(コピーするシート) <sheet2>    A列    B列 ○○支店  15 △△支店  10 ××支店  28 ■■支店  25 ◎◎支店  18 sheet1のフォーマットをsheet2のB列の数コピーして、sheet2のA列の支店別に新しいブックへ保存するという作業のマクロを組みたいのですがどのようにしたらよいでしょうか?お教えください。VBAに関しまして初心者で、勉強しているのですがいまいちわかりません。どうぞよろしくお願いします。 今、一つだけコピーして保存するということはできていますが、上記のように全部を自動的にしたいのですが・・・ Sub グラフをコピーして別ブックへ保存() Dim mySheet As Worksheet Set mySheet = ActiveWorkbook.Worksheets("グラフ") mySheet.Copy ActiveWorkbook.SaveAs Filename:="大阪第一" '別名を付けてブックを保存する ActiveWorkbook.Close '別名ブックを閉じる End Sub よろしくお願いします。

  • エクセルVBAについての質問です。

    エクセルVBAについての質問です。まったくの初心者です。 閉じたままの他のブックBのSheet1 C7セルからデータを取得して作業中のブックA Sheet1 H7セルに記入したいのです。 どうかご指導お願いいたします。 まったくの初心者で、本やネットを漁っているのですが、何日かかってもできません。センスないんだと思いますが、あきらめきれずの質問です。アドバイスいただけると幸いです。

  • エクセルVBA 初期処理

    エクセルVBA初心者の中年オヤジです。 あるエクセルブックを開く毎、不必要なシートを削除するための方法を、出来るだけ具体的に教えて下さい。 あるエクセルブックに「検索条件入力・名称マスタ・検索結果」の固定3シートがあります。 検索条件を入力し検索ボタンを押下する事で、別シートから該当データを抽出するのですが、検索条件を変更し検索ボタンを押下する毎に「結果シート」が増えて行く仕様としています。 抽出部分や結果シートのコピー部分の作成、及びクリアボタンを押下した場合の「結果」シート削除のプログラミングは完了しましたが、このエクセルブックを開いた時に、初期処理として全「結果シート」を削除するにはどの様にしたら良いのか教えて下さい。 ブック利用者が「結果シート」を残したまま保存した場合を考慮し、初期処理としてこの全「結果シート」を削除したいのです。 宜しくお願い致します。

  • Excel VBA 特定の複数のシートのみ保存する方法

    VBAで1つのシートを保存する方法やブックを保存するはわかるのですが 「不要なシートを除いて、他全てのシートをひとつのブックとして保存」する方法がわかりません。 わかる方教えてください。 ▼作業の流れ▼ 【1】操作するシートである計算を行います。 ※現在のシートは1つとします。 「操作」シート 【2】計算結果はシートが追加され各シートに移動されます。  (1)シート、(2)シート・・・と(最大は20まで) 【3】各シートに割り振られたら(「操作」シートを除いて)名前をつけて保存します。 ※現在のシートは4つあるとします。 「操作」シート 「(1)」シート 「(2)」シート 「(3)」シート (1)、(2)、(3)の3つシートだけを「名前を付けて保存」をしたいと考えています。

  • VBAで複数のオブジェクトを同時に解放するためには

    Excel2003です。 あるExcelブック内にある複数のVBAオブジェクトを同時に解放したいのですが、 どうやってもオブジェクトを一つしか選択することが出来ません。 たくさんあるとかなり手間がかかってしまいます。 まさか、VBAの解放を行うためのプログラムをVBAで書かなければ出来ないのでしょうか?

  • エクセルVBAについて

    今、エクセルVBAでマクロの作成を行っています マクロの中で、作業用に別なエクセルとシートを作成したのですが マクロの最後でその作業用のエクセルとシートを削除する用にしました。 その際に、エクセルがメッセージボックスが開き 『このエクセルブックを閉じますか』や『このシートを削除してよろしいですか』などと聞いてきます。 このボックスを出さないように強制的に消すことは出来ないのでしょうか? 出来るのであれば、やり方を教えてください。

  • Excelのシート分割表示作業はできますか?

    Excelのブックを開いてその中にシートが通常3つありますが、 ブックひとつの中にあるシートを2だけ左右に並べて作業することはできますか? 例えばシート1に結果数値またはグラフだけを見せるようにして シート2にはデータの算出用(ちょっと複雑な計算をしたリスト)にして 作業したいと思うのですが、 いちいちシートを切り替えていたのでは作業上不便と思いますので この方法ができないものかと思っています。 できるのでしょうか?

  • エクセルVBAでファイル・シート名を指定して、現在のブックのシートにコピーしたい

    エクセルVBA独学中の超初心者です。 VBAを利用して以下のことがしたいのですが、わかりません。 助けて下さい。よろしくお願いいたします。 1. ファイルを選択する。 2. 1で選択したファイルから、シート名を選択する 3. 2で選択したシートを現在のブックのSheet1にコピーする

  • メモリの解放について VB6 VBA

    VB6やVBAで動的配列をERASEしたのですが、タスクマネージャーで見ても使っているメモリを解放しているように見えません。 動的配列の内容をMsgBoxで表示させるたびにメモリがどんどん減っていきます。Eraseしても戻りません。 Redim ArryaDat(0)とかでも無理でした。 APIを使って(どんな方法)でも、メモリを解放したいのですが、可能でしょうか? Dim ArrayDat() as String Redim ArrayDat(100) ArrayDat(0) = "なんとか" ArrayDat(1) = "かんとか" ... ArrayDat(100) = "メモリを解放したい" for i = LBound(ArrayDat) to UBound(ArrayDat) MsgBox("どんどんメモリが消費されていく・・ [" & ArrayDat(i) & "]") next i Redim ArrayDat(0) Erase ArrayDat NsgBox("解放したつもり? 誰か教えて") あと、.NETではメモリ解放はどうなっているのでしょうか? まだ使いませんが、頭の片隅に入れておきたいです。

専門家に質問してみよう