
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
>遅くなる前の(普通に早い)同じプログラムというか、遅くなる前のプログラムを入れてやってみると普通に早く動作します。
そうすると、話が全然違ってきます。私は、使っている最中で遅くなる現象を書いてきましたが、コードとして、遅くなるという場合は、代表的なコードとしては、こういうものがあります。これらを外すと、遅くなります。
Application.ScreenUpdating = False
実行プログラム
Application.ScreenUpdating = True
他にも、イペントを止めるためのオプション
Application.EnableEvents = False
他のブログラムが介入するのを防ぐオプション
Application.Interactive = True
再計算を防ぐために、再計算を自動化か手動化にさせるものがあります。
Application.Calculation = xlCalculationManual
それ以外に、複雑なユーザー定義関数などがあります。それは、経験者が、実際に見てみないと分からないことがあります。ただ、ステップモードで調べてみるか、コードの途中からブレークポイントを入れて、その後、ステップモードで、途中からコードが飛んでいないか調べる方法があります。
No.5
- 回答日時:
>いくつかのマクロでこのひとつだけがこんな症状になり原因がわかりません。
#4の回答者ですが、「原因がわかりません」と言われてしまうと、こちらとしては、もう返事のしようがありません。まず、消去法で、そうでないものに対して、そうでないという返事をしていただかないと、詰められません。それ以外のものもあると言いたいように思えますが、そうしたら、ハードとシステムのメインテナンスをしてください。
この回答への補足
すみません。ありがとうございます。
遅くなる前の(普通に早い)同じプログラムというか、遅くなる前のプログラムを
入れてやってみると普通に早く動作します。ですから、なにかプログラムに変な味付けを
してしまっているんじゃないかと思っています。
No.4
- 回答日時:
本当は、ExcelのバージョンとOSが書かれてあるともう少しはっきりしてくるかもしれません。
>10秒で終わっていたマクロ
かなり大きな範囲を扱っているものだと思います。
4つの可能性を考えてみました。
ひとつは、私の所で起きている現象で、Excelのオブジェクトには、どうも、メモリ・リークがあるものがあるようです。時間が経つと良くありません。特に、UserForm をひらきっぱなしにしていたりするとトラブルが発生します。ただ、私の場合は、一般的なUserFormではなく、サブクラス化して内容を変えています。
もうひとつは、
例えば、IEのオブジェクトと、何か別のActiveX コントロールなどがコンフリクトしているとか、外部オブジェクトが、反乱を起こしている可能性があります。そういう場合、極端にスピードが落ちます。その場合は、タスクマネージャでも分かるとは思いますが、Sytem Explorer では良く分かるのですが、Excel発の外部オブジェクトと、別の常駐しているソフトが分かるはずです。その場合は、こうしたツールで、どちらかの常駐をやめれば、元に戻るはずです。ただ、非常に厄介な問題です。これは、どうもセキュリティ・ソフトなどにも関係しているようです。
可能性は少ないのですが、Excelでは、使用している限りはメモリを解放しないようです。VRAMメモリと仮想メモリとが二つの問題が出てくるようです。キャッシュに、コンパイルの中間言語を溜めすぎている可能性もあります。この場合は、VBEditot のオプションの全般の中のコンパイルの、バックグラウンド・コンパイルをやめればよかったはずです。(ただし、期待は薄いです)
なお、グローバル変数は、それ自体が増加するわけではありませんし、仮に、Range型でも、増加しているわけではないので、あまり変化しません。しかし、グローバル変数であろうとも、ローカル変数であろうとも、ワークシートの領域を広げていくようなものや、関数を利用したものは、トラブルが発生する可能性はあると思います。一旦終了しないと、元には戻りません。
この回答へのお礼
お礼日時:2010/11/24 21:37
ご親切に、また誠意をこ込めた回答ありがとうございます。
XP 2003ですが、いくつかのマクロでこのひとつだけがこんな症状になり原因がわかりません。

No.3
- 回答日時:
Public な変数や、標準モジュール内の Private な変数を使い、大きなデータや多数のデータを取り扱っているとか。
Public な変数や標準モジュール内の Private な変数は VBA の実行が終了してもブックを閉じない限り解放されなかったと記憶しています。
No.2
- 回答日時:
はじめまして、通るすがるともうします。
あくまでも想像ですが、うまくメモリ解放をしていない、または前の状態のメモリ使用が残っていて
起動するたびに、メモリを拡張していってPCのメモリを使い尽くし、その後仮想メモリを使用してい
いるのではないでしょうか。10倍20倍と時間がかかるタイミングディスクを使用しているがための
ランプ(PC本体にある)がついてませんか?もしくはディスクからアクセスしているためのガラガラ
という音してませんか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語で、メモリを解放しないで...
-
メモリのセグメント違反の解決...
-
AIXでのプロセス使用メモリの最...
-
C言語における再帰呼び出しの...
-
メモリの消費量について
-
メモリーリークエラーが起こる
-
VB2005 Datagridview の仮想モ...
-
VBAの配列サイズとメモリに関して
-
C#のOutOfMemoryException発生...
-
CFileのOpenで例外(998:メモ...
-
PIC 文字 を 数値に 変換
-
「memcpy」と「strcpy」について
-
エクセルのメモリ使用状況/Appl...
-
EXCEL-VBAにてADOのレコードセ...
-
メモリが不足しています(VBA)
-
メモリアクセス時間の計測方法
-
メモリの解放の仕方
-
オブジェクトの開放
-
バッチファイルでの実行EXEのメ...
-
ルネサスマイコン(R8C) ビルド...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語で、メモリを解放しないで...
-
Access Violationについて
-
VBAの配列サイズとメモリに関して
-
メモリのセグメント違反の解決...
-
メモリが不足しています(VBA)
-
メモリ不足
-
大容量のメモリ確保をスワップ...
-
ファイルマッピング関数で失敗
-
PC-98で拡張メモリを使え...
-
エラーについて
-
「ヒープサイズの設定」て何?
-
エクセルのメモリ使用状況/Appl...
-
C言語における再帰呼び出しの...
-
オフスクリーンサーフェスへの...
-
1ページに収まるオブジェクト...
-
新規購入PCのスペックについて...
-
4GB搭載したマシンのメモリ情...
-
組み込み系でのmallocについて
-
ルネサスマイコン(R8C) ビルド...
-
Visual Basic Net2003
おすすめ情報