2012
6
15

ExcelVBAの処理を画面非表示で高速化+進捗状況を表示する

ExcelVBAはブックやシートを行ったり来たり、セルに値がひとつずつ入っていくのが(たとえ高速だとしても)がっつり見えます。最初こそ「おー、動いてる」と思えますが、時間が長いと目障りにw 画面表示をオフにすると、劇的に高速になりますよ!


スクリーンアップデートをオフに

処理をこのコードで括るだけ!セルへの入力やシート・ブックの切り替えを非表示にすることで本当に速くなります。

すっごいよく使うわりに、ちょっとコードが長くて、いつも「あー、あれ、どうやって書くんだっけ!」と言っては過去のプログラムを引っ張り出してコピペをするという無駄なことをしていたので、この記事を書いたことをきっかけに辞書登録しましたw

「これ、ちゃんと動いてるの?」という不安

超速くなってすごく良いんですが、例えば、処理が30秒→10秒になったとしたとき、10秒間画面がまったく変わらないというのは、ユーザー側は不安ですよね。待ってるほうの数秒ってすごく長く感じますし。ですので、併用して進捗表示をおすすめします。

お手軽に進捗表示

120615-1

こんな感じのユーザーフォームを作りましょう。しかくの部分は、ラベルで“□”と入れているだけです。

で、こんな風に処理の段階に分けてラベルをひとつずつ“■”にしてあげたものを上書きすると、処理中に簡易的なプログレスバーのような役割をしてくれます!普通にプログレスバーもあるんですが、あれはmaxとminを数値で指定しないといけないので、用途によっては使いづらいかなーと。

120615-2

実際に動かしてみるとこんな感じ。もちろん□の数はいくらでも設定できますよ。変更が反映されない場合は、ラベルを変えた後に.Repaint(7行目と一緒)をそれぞれ入れてあげるといいみたいです。

以上です!私は良く使う手法なので、どなたかのお役に立てれば幸いです。

  • このエントリーをはてなブックマークに追加
  • follow us in feedly 618
  • RSSを登録

公開日:2012/06/15


コメントを残す




*印は必須項目です。コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にですがスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)


back to top