スポンサーリンク

VBAの画面のちらつきがたった1行で解決して処理高速化も

excel-vbaExcel-VBA
スポンサーリンク

目障りな一瞬の画面ちらつきを防止したい

エクセルでセルに値を入力する時にスクロールをして、目的のセルを表示させてから文字や数字を入力するのが当たり前ですよね。

当然わざわざ自分自身の目で見ながらセルを移動させるのは非常に非効率で、ボタンひとつワンクリックで目的のセルが移動・表示させることができれば作業効率化できますよね。

波乗りアヒル
波乗りアヒル

このページにたどり着いたということは、ユーザーフォームを使うようになると、同じ思いをしている方だと思います。

コマンドボタンを押すと画面が一瞬ちらつく!

本来は、というよりも、画面の見えないところで並べ替えやデータの抽出などを行ってから、元の画面に戻るようにVBAコードを書いているのに、その作業中の画面が移動して見えてしまう。

VBAコードでの処理のデータ量にもよりますが、ほんの数秒あるかどうかの時には一瞬画面が切り替わりちらついているようになってします。

波乗りアヒル
波乗りアヒル

目障りなので何とかしたいと思いましたよね、だから検索してこのページにたどり着いたと思います。

そこで、Application.ScreenUpdatingで更新停止しよう!

Excel-VBAの書籍には処理内容に合わせて画面表示が更新されて、画面がちらつき処理が遅くなるのを防止するためにScreenUpdatingプロパティを使うと記載されています。

例えば、シート1を表示していてシート2のセルAA1~AZ1000に「1」を入力したら、シート1のセルA1に移動するというコードだけを書くと、下記のようになります。

Sub 画面更新停止()
Sheets(“sheet2”).Select
Range(“AA1:AZ1000”).Value = “1”
Sheets(“sheet1”).Select
Range(“A1”).Select
End Sub

実際にこのようなVBAコードは使いませんが、一瞬画面がちらつきますので、ScreenUpdatingプロパティを使うとちらつきが防止できます。

Sub 画面更新停止()
Application.ScreenUpdating = False
Sheets(“sheet2”).Select
Range(“AA1:AZ1000”).Value = “1”
Sheets(“sheet1”).Select
Range(“A1”).Select
Application.ScreenUpdating = True
End Sub

使い方は簡単で、VBAコード処理の前にApplication.ScreenUpdating = Falseと書いて、画面更新処理を停止します。

最後に(End Sub)の前にApplication.ScreenUpdating = Trueと書いて、画面更新処理を再開(元に戻す)します。

波乗りアヒル
波乗りアヒル

Falseが停止、Trueが再開です。

簡単でしょう!

ScreenUpdatingを使うことにより、ちらつき防止のついでに無駄な更新もなくなるので、VBAコードの処理も早くなりました。
VBA書籍にはTrueを省略可(マクロ実行終了で自動的に戻る)となっていたので、使い始めた当初は省略していましたが、時々フリーズすることがあったので、今は省略せずに必ず記載しています。記載してからはフリーズしていません。

Excel-VBAもくじへ

コメント