
taka



最新記事 by taka (全て見る)
- 『雑記』最近の私の話~ - 2019年9月26日
- 【動画】自作パソコン構成変更!ケースをNZXT H500に交換しました! - 2019年6月5日
- VBA 『Array関数』指定した要素で配列を作成する - 2019年5月23日
- 「動画」初完全ワイヤレスイヤホン『Jabra Elite Active 65t』 - 2019年5月17日
- VBA 日付で令和を簡単に判定してみよう - 2019年5月7日
Excel VBA高速化テクニック1【画面描写を止める】
Excel VBAに限らず、プログラムという物は処理の結果は同じでも記述の仕方によって処理速度に大幅な差が出てくることがあります。
今回はExcelVBAで処理速度を簡単に向上させる方法の一つをご紹介します。
高速化の紹介
今回ご紹介する高速化の方法は一番簡単かつ、一番効果が高い【Application.ScreenUpdating 】をご紹介します。
【Application.ScreenUpdating 】は簡単に言うと【画面描写を止める】というコードです。
- Application.ScreenUpdating = False ‘画面描写を止める
- Application.ScreenUpdating = True ‘画面描写を戻す
画面の描写を止めるとどうなるの?と思われるかもしれませんが。
Dim i As Long For i = 1 To 10000 Cells(i, 1).Value = i Next i
このようなコードがあったとすると
- セルA1に1を入力
- 画面上でもセルA1に1を表示
- セルA2に2を入力
- 画面上でもセルA2に2を表示
これを10000回繰り返しているわけですからPCにも少なからず負荷がかかるのもわかっていただけるかと思います。
ですが【画面上でも表示】を抑制してあげて、10000回終了した後に画面に表示させてあげることによって10000回繰り返していた処理を1回で済ませることができるので、処理速度が上がるのがお分かりいただけると思います。
Dim i As Long Application.ScreenUpdating = False '画面描写を止める For i = 1 To 10000 Cells(i, 1).Value = i Next i Application.ScreenUpdating = True '画面描写を戻す
そもそも高速処理されているプログラムの画面表示を停止したところで気にする人も少ないと思いますが(笑)
※PCのスペックや作業によってほとんど差がない場合があります
サンプルコード
このコードは処理にかかった時間を表示するコードですのでご自由にご利用ください。
このレベルの処理だと大した差がないかもしれませんのでこれを参考にしてカスタマイズをしてみてください!
Sub sample() Dim i As Long Application.ScreenUpdating = False '画面描写を止める startTime = Timer '計測開始 For i = 1 To 10000 Cells(i, 1).Value = i Next i stopTime = Timer '計測終了 Application.ScreenUpdating = True '画面描写を戻す endtime = (stopTime - startTime) '計測結果を計算 MsgBox "所要時間は" & endtime & "秒でした" End Sub
まとめ
Excel VBAは手作業に比べると比較にならないスピードで処理をするものですが、プログラムの中では少し遅い部類に入ります。
まして効率が悪いプログラムソース(コード)で記述されていた場合さらに処理速度は低下します。
ですが今回のように少しの工夫でVBAでも処理速度を改善することも可能ですので参考にしてみて下さい。
フォロー・チャンネル登録お願いします
VBA以外についてのブログはこちら↓
https://yb-log.com/■Twitterフォロー
Follow @taka_pc1027■YouTubeチャンネル登録
コメントを残す