Excel97で、マクロをなるべく高速化する一般的な
方法を教えて下さい。
画面表示の追随を抑制して高速化する方法が
あると聞いたのですが・・・。他の方法でも
よいのでお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

皆さんのおっしゃることにプラスして、


セルの値を変更すると、自動的にエクセルの
計算が動く場合がありますので、

Application.Calculation = xlCalculationManual

を行って、自動計算をとめて、
マクロ終了前に

Application.Calculation = xlCalculationAutomatic

で自動計算するように戻してやってください。
なお、途中で、計算をやらせたい場合は、

Calculateメソッド

で、強制計算させることもできます。
    • good
    • 0

他の皆さんの仰ってるとおりですが、アルゴリズム面に限っていえば、とりあえずはループの中身を最適化してみるのがいいでしょう。


For ~ Next とか、Do ~ Loopの中身には、出来るだけ無駄な処理を書かない。ループの外に出せるものは出してしまう。ってことを意識しながらプログラムを書くと、そこそこ高速なものが出来上がるように思います。
    • good
    • 0

画面表示のoffは1番さんの回答通りです。


またマクロの自動記録を使うと非常に無駄の多いコードに
なるので、無駄な部分はできるだけ省略しましょう。
セル等ををいちいちselectやactiveteする必要は殆ど
ありません(画面の表示をoffにしてても無駄にコード
を消化していくので遅くなります)。

他の一工夫としては
選択するときはifよりはselect構文で、
ループさせるときはfor each next(でしたっけ?)構文の処理が若干早いようです。
    • good
    • 0

セルを見に行く回数をできるだけ減らした方がいいみたいっすよ。


同じセルのデータを使うのに、何回も見に行くと処理が遅くなるみたいで、

a = cells(1,1).value
b = cells(1,1).value * 2
c = cells(1,1).value * 3



a = cells(1,1).value
b = a * 2
c = a * 3

にしたら、処理が早くなったことがあるんだけど・・・。
これって当たり前すか?
    • good
    • 0

画面表示を止めるのは


Application.ScreenUpdating = False
でできます。これをやると結構早くなりますよ。

あとはセルに値を書き込んだり読んだりする時に
セルを選択してから読み書きするのではなくて
直接指定すると早くなります。

Cells(A, 1).Select
Selection.Value = hogehoge
     ↓
Cells(A, 1).Value = hogehoge

といった感じです。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード


人気Q&Aランキング

おすすめ情報