カーソルが移動すれば画面が移動する。
当たり前の事なのですがマクロを使ってプログラムした時に、VBA作業順にセルが移動するたびに画面が左右上下に移動してチラついてものすごく目障りと感じませんか?
セルが移動するたびに画面は動かないようにする
ユーザーフォームを使っていて、様々なVBAコードを書いて繰り返し作業などやセルに入力するのにコマンドボタンを使いますよね。
例えば、ユーザーフォームに配置されたコマンドボタンを押すと特定のセルに移動する場合ならば、当然移動先のセルに画面も移動してくれないと困るのですが、テキストボックスに入力した文字や数字を指定したセルに転記するだけの場合は画面が移動しなくてもいい場合がありますよね。
実際、エクセルで作った住所録を使っている時に、入力フォームを使っていて入力するたびに画面があちこちに移動してしまい、そのたびに画面が一瞬だけ入力したセルに移動してから元の画面に戻るのでちらついた感じになってしまいます。
ScreenUpdatingでちらつき防止
この「ScreenUpdating」を使うと先ほどお話しした通り、住所録の入力ボタンを押して指定したセルにテキストボックスの値をセルに転記しても画面は動きません。
そして、見えないところでプログラムが進行している為か、画面が移動しない分処理のスピードが速くなった気がします。
実際に使っているVBAコードを書いたので長くなっていますが、作業をScreenUpdatingで囲むだけです。
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Range(“AA2”).Value = TextBox1.Value
Dim mycell As Range
Set mycell = Range(“A2:A100”).Find(What:=Range(“AA2”).Value, LookAt:=xlWhole)
If Not mycell Is Nothing Then
mycell.Select
With UserForm2
For i = 2 To 9
UserForm2.Controls(“TextBox” & i).Value = mycell.Offset(, i – 1).Value
Next i
End With
Else
MsgBox “未登録番号です。新規登録フォームへ移動します”
Unload UserForm2
UserForm1.Show
Exit Sub
End If
Application.ScreenUpdating = True
End Sub
- コマンドボタン(CommandButton1)を押したら
- 画面移動は停止(False)
- 3行目~18行目は住所検索して書き換えるコードです
- 画面移動は再開(True)
- 終了
19行目の「画面移動再開」のVBAコードは書かなくてもいいかもしれませんが、一応念の為に、停止のままでは不都合があるかもしれないので、再開コードを入れておいて元の状態に戻しているだけです。
このようなコードを書いて、エクセルで作った住所録で顧客番号で検索すると、ユーザーフォーム上に見つけた名前や住所などの個人情報が表示されて、修正したい項目を書き換えるてコマンドボタンを押すとデータが書き換えられるようになります。
その為、検索すると見つけたセルに移動して、修正するたびに画面が移動してから元の状態のシートに移動するので画面がチョコチョコ動いていましたが、ScreenUpdatingを使うことにより、画面移動が防げるようになったので、とても快適になりました。

- 画面上部の緑色のメニューバー(リボンツールバー)
- 数式表示窓(数式バー)
- 行番号・列番号
- 画面下のシート名表示
- 左右移動バー(水平スクロールバー)
- 上下移動バー(垂直スクロールバー)
- マス目の線(グリッド線)
- 画面下のステータスバー
画面表示の便利機能