[ Excel-VBA ] 画面描画を停止してチラツキをなくす ( Application.ScreenUpdating )

Pocket

エクセルのセルなどを VBA で操作するときには、操作に合わせて画面も更新・再描画されていきます。VBA での操作が少なければ気になりませんが、大量のセルなどのを操作する場合には、画面の再描画のチラツキがストレスとなったり、描画のために処理時間が長くなったりします。

ここでは一時的に画面(シート)の描画を停止させて、VBA からの操作完了後に再描画させるサンプルスクリプトを掲載しています。

スポンサーリンク

画面の描画の停止と再開

画面更新を停止して、VBA の操作完了後に再描画するサンプルになります。描画の更新を停止・再開していのは Application.ScreenUpdating プロパティです。この部分をコメントアウトして動作を比較すると違いが良くわかります。

Private Sub CmdSetData_Click()

    ' 画面の描画更新を行わない(OFF)
    Application.ScreenUpdating = False

    Const MaxRowCount = 10000 ' 最大出力行数
    Dim row As Variant
    
    With Worksheets("Sheet1")
        ' クリア処理
        For row = 1 To MaxRowCount
            ' 背景色と値をクリアする
            .Cells(row, 1).Value = ""
            .Cells(row, 2).Value = ""
            .Cells(row, 1).Interior.ColorIndex = xlNone
            .Cells(row, 2).Interior.ColorIndex = xlNone
        Next
    
        ' MaxRowCount行分、繰り返し処理
        For row = 1 To MaxRowCount
        
            ' セルに値を設定です
            .Cells(row, 1).Value = row ' A列
            .Cells(row, 2).Value = "テキスト" & row ' B列
            
            ' 奇数行の場合は背景色を設定する
            If (row Mod 2) Then
                .Cells(row, 1).Interior.ColorIndex = 36
                .Cells(row, 2).Interior.ColorIndex = 36
            End If
            
            ' 描画の様子が視覚的にわかり易いようにスクロールバーを
            ' 設定したセルに毎回移動させていく
            ActiveWindow.ScrollRow = row

        Next
        
    End With
    
    ' 画面の描画更新を行う(ON)
    Application.ScreenUpdating = True
    
End Sub

上記スクリプトで作成される内容

サンプルを実行すると、以下の画面が描画されます。

サンプルの出力結果

サンプルの出力結果

参考
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *