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

下手なマクロですが、マクロを何回か走らせていると、急にスピードダウンするんです。
例えば、10秒で終わっていたマクロが急に(でも何かしてしまっているんでしょうが)
その10倍も20倍も時間がかかるようになってしまうことがあるのですが、なにをすれば?
ゆっくりと動作しているのがわかるんですが・・・・

A 回答 (6件)

>遅くなる前の(普通に早い)同じプログラムというか、遅くなる前のプログラムを入れてやってみると普通に早く動作します。



そうすると、話が全然違ってきます。私は、使っている最中で遅くなる現象を書いてきましたが、コードとして、遅くなるという場合は、代表的なコードとしては、こういうものがあります。これらを外すと、遅くなります。

Application.ScreenUpdating = False
  実行プログラム
Application.ScreenUpdating = True

他にも、イペントを止めるためのオプション
Application.EnableEvents = False
他のブログラムが介入するのを防ぐオプション
Application.Interactive = True
再計算を防ぐために、再計算を自動化か手動化にさせるものがあります。
Application.Calculation = xlCalculationManual

それ以外に、複雑なユーザー定義関数などがあります。それは、経験者が、実際に見てみないと分からないことがあります。ただ、ステップモードで調べてみるか、コードの途中からブレークポイントを入れて、その後、ステップモードで、途中からコードが飛んでいないか調べる方法があります。
    • good
    • 0

>いくつかのマクロでこのひとつだけがこんな症状になり原因がわかりません。



#4の回答者ですが、「原因がわかりません」と言われてしまうと、こちらとしては、もう返事のしようがありません。まず、消去法で、そうでないものに対して、そうでないという返事をしていただかないと、詰められません。それ以外のものもあると言いたいように思えますが、そうしたら、ハードとシステムのメインテナンスをしてください。

この回答への補足

すみません。ありがとうございます。
遅くなる前の(普通に早い)同じプログラムというか、遅くなる前のプログラムを
入れてやってみると普通に早く動作します。ですから、なにかプログラムに変な味付けを
してしまっているんじゃないかと思っています。

補足日時:2010/11/25 21:51
    • good
    • 0

本当は、ExcelのバージョンとOSが書かれてあるともう少しはっきりしてくるかもしれません。



>10秒で終わっていたマクロ
かなり大きな範囲を扱っているものだと思います。

4つの可能性を考えてみました。

ひとつは、私の所で起きている現象で、Excelのオブジェクトには、どうも、メモリ・リークがあるものがあるようです。時間が経つと良くありません。特に、UserForm をひらきっぱなしにしていたりするとトラブルが発生します。ただ、私の場合は、一般的なUserFormではなく、サブクラス化して内容を変えています。

もうひとつは、

例えば、IEのオブジェクトと、何か別のActiveX コントロールなどがコンフリクトしているとか、外部オブジェクトが、反乱を起こしている可能性があります。そういう場合、極端にスピードが落ちます。その場合は、タスクマネージャでも分かるとは思いますが、Sytem Explorer では良く分かるのですが、Excel発の外部オブジェクトと、別の常駐しているソフトが分かるはずです。その場合は、こうしたツールで、どちらかの常駐をやめれば、元に戻るはずです。ただ、非常に厄介な問題です。これは、どうもセキュリティ・ソフトなどにも関係しているようです。

可能性は少ないのですが、Excelでは、使用している限りはメモリを解放しないようです。VRAMメモリと仮想メモリとが二つの問題が出てくるようです。キャッシュに、コンパイルの中間言語を溜めすぎている可能性もあります。この場合は、VBEditot のオプションの全般の中のコンパイルの、バックグラウンド・コンパイルをやめればよかったはずです。(ただし、期待は薄いです)

なお、グローバル変数は、それ自体が増加するわけではありませんし、仮に、Range型でも、増加しているわけではないので、あまり変化しません。しかし、グローバル変数であろうとも、ローカル変数であろうとも、ワークシートの領域を広げていくようなものや、関数を利用したものは、トラブルが発生する可能性はあると思います。一旦終了しないと、元には戻りません。
    • good
    • 0
この回答へのお礼

ご親切に、また誠意をこ込めた回答ありがとうございます。
XP 2003ですが、いくつかのマクロでこのひとつだけがこんな症状になり原因がわかりません。

お礼日時:2010/11/24 21:37

Public な変数や、標準モジュール内の Private な変数を使い、大きなデータや多数のデータを取り扱っているとか。


Public な変数や標準モジュール内の Private な変数は VBA の実行が終了してもブックを閉じない限り解放されなかったと記憶しています。
    • good
    • 0

はじめまして、通るすがるともうします。


 あくまでも想像ですが、うまくメモリ解放をしていない、または前の状態のメモリ使用が残っていて
 起動するたびに、メモリを拡張していってPCのメモリを使い尽くし、その後仮想メモリを使用してい
いるのではないでしょうか。10倍20倍と時間がかかるタイミングディスクを使用しているがための
ランプ(PC本体にある)がついてませんか?もしくはディスクからアクセスしているためのガラガラ
という音してませんか?


 
    • good
    • 0
    • good
    • 0

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