2005年10月29日
大量のデータを処理する場合、マクロの実行時間が異常にかかる場合があります。
「新しいマクロの記録」で作成されるマクロは自動でコードを作成してはくれますが、
さすが「記録」というだけあって、ロジックはいまひとつです。
かといって、時間がない場合や、初心者の方はロジックをどうこうしようなんて思いません。
そんなとき、ものは試しに以下の2行をソースに書き込んでみましょう。
・最初に
以下に述べることは危険なことでは全くないのですが、
何かあったときに責任は取れませんので、
必ずExcelファイルは保存をしておいてくださいね。
あと、前後逆になるかもしれませんが、注意事項は
最初にお読みください。
・サンプルソース
Sub マクロ名
Application.Visible = False 'この行を書き足す
'マクロが作ってくれたコード
Application.Visible = True 'この行を書き足す
End
・注意事項
いきなり実行してびっくりするといけないので
初心者の方は実行する前にこちらを読んでください。
まず、書き足した「Application.Visible」とは、
Excelアプリケーションの表示を設定するコードです。
「Application.Visible = False」
と書けば、
Excelが画面から非表示になります。
タスクバーの表示も消えますので、Excelが終了したようにも見えますが、
見えない状態でマクロが実行されていますので安心してください。
(疑い深い人がいましたら、
(Ctrl+Alt+Deleteキーを押して、タスクマネージャーを呼び、
(プロセスのところを見てみましょう。
(イメージ名に「Excel」の文字があるはずです。
そして最後に記述した
「Application.Visible = True」
によって、Excelが画面に表示されるようになります。
・注意事項 その2
Excelが非表示中にエラー、またはマクロをとめてしまった場合、
Excelが非表示のままになってしまうことがあります。
VBAがわかる人は、イミディエイトウィンドウに
Application.Visible = True
と入力し、エンターを押すことでExcelを表示させることができます。
VBAがあまり詳しくない人は、Windowsを再起動したほうが早いかもしれません。
・速くなるのか?
通常の場合、なにか処理が行われると画面に結果が表示されます。
この「画面に結果が表示」という処理も意外と時間がかかるものなのです。
そこで、Excelを非表示にし、処理途中の結果を表示させないようにさせています。
「どれだけはやくなるんだ?」といわれると困りますが、
「速くなったらラッキー」ぐらいな気軽さでお試しください。
うんうん
当然、画面の描画ない分早くなりますよね。
それと、VBA では With の多用も高速化に寄与しますね。
投稿者:
じゃんぬねっと
at 2005-11-03 13:26:30
Withの多用
>それと、VBA では With の多用も高速化に寄与しますね。
そういえば、「マクロの記録」で作成したマクロって、異様なぐらいWithを多用してますね。
意外と速度面の配慮がなされているのかも?
投稿者:
mk3008
at 2005-11-03 23:47:24
たしかに...
With句を使うとオブジェクトへのアクセスが確かに高速化しますね。
もっと高速化を望むのなら、気を使いたいのがSelectメソッド。オブジェクトをSelectしない方式で記録したものをエクセルが自動修正してくれるとカナリ早くなりそうなんですが、それが実現されるとプログラミングの楽しみも少なくなくなりそうなので、それは望まないでおきましょう(笑)
投稿者:
Colo
at 2005-11-06 16:00:30
奥が深い・・・
投稿者:
mk3008
at 2005-11-08 08:37:16
早くするにはこんな方法も
Application.ScreenUpdating= False
~処理~
Application.ScreenUpdating= True
これだとExcelは消えませんが、画面描画を停止するので、処理は早くなりますね。
途中で止めてしまった場合、イミディエイトで True に戻す必要があるのは同じですけど…
投稿者: spillna
at 2005-12-20 16:30:44
ScreenUpdatingですか
なるほど。
画面への更新を止める方法があるのですね。
そちらのほうが安心感があるかも?
投稿者:
mk3008
at 2005-12-22 01:20:06
http://shinshu.fm/MHz/88.44/a05597/0000085938.trackback
http://shinshu.fm/MHz/88.44/archives/0000085938.html
※記事・コメントなどの削除要請は
こちら