お知らせ

エクセル小技・豆知識

これから少しずつ、エクセル小技豆知識をご紹介します。今まで困っていた作業がカンタンに片付くかも知れません。是非、お試しください。

説明:
    通常、EXCELのマクロを実行すると対象となっているEXCELシートへの修正がリアルタイムに反映され、シート間のデータコピーなどを行うと、とても見られたものではありません。そのため、処理が終了するまでEXCELシートの(表示上の)更新を抑制する方法が「Application.ScreenUpdating」の利用となります。

使用例:
    下記例はシートの切り替えを行う極端な例です。

Option Explicit

‘—————————————————–
‘   Application.ScreenUpdating の使用例
‘—————————————————–
Sub Macro1()
    Dim Row As Integer
    Dim Value As Integer
    ‘—————————————————–
    ‘ リアルタイムにEXCEL画面を更新する
    ‘   本コマンドを指定しない、またはTrueを指定すると
    ‘   以下の例ではリアルタイムにEXCELのシートへ値を
    ‘   設定していくところが見える。
    ‘     デバッグ時にはよいが、実行スピードが遅い

    ‘ 画面更新を有効にする
    Application.ScreenUpdating = True

    ‘ 出力列をクリア
    Sheets(“Sheet2”).Select             ‘ コピー先のシートに切り替え
    Columns(“A:E”).Select               ‘ A~E列全体を選択
    Selection.ClearContents             ‘ 選択範囲内をクリア
    Range(“A1”).Select                  ‘ シートの左上に戻る
    Sheets(“Sheet1”).Select             ‘ コピー元のシートに切り替える

    ‘ セルに数値を設定
    For Row = 1 To 1000
        With Sheets(“Sheet1”)
            .Select                     ‘ コピー元のシートに切り替える
            .Cells(Row, 1) = Row        ‘ Row行1列にRowの値を設定
            Value = .Cells(Row, 1)      ‘ ValueにRow行1列の値を退避
        End With
        With Sheets(“Sheet2”)
            .Select                     ‘ コピー先のシートに切り替える
            .Cells(Row, 1) = Value      ‘  Row行1列にValueの値を設定      End With
    Next

    ‘—————————————————–
    ‘ Macro実行中にEXCEL画面を更新しない
    ‘   本コマンドでFalseを指定すると本マクロ実行中は
    ‘   EXCELシートに変化は起きず、マクロ終了後に
    ‘   値が設定されたシートが表示される。
    ‘     実行スピードが早い

    ‘ 画面更新を無効にする
    Application.ScreenUpdating = False

    ‘ 出力列をクリア
    Sheets(“Sheet2”).Select             ‘ コピー先のシートに切り替え
    Columns(“A:E”).Select               ‘ A~E列全体を選択
    Selection.ClearContents             ‘ 選択範囲内をクリア
    Range(“A1”).Select                  ‘ シートの左上に戻る
    Sheets(“Sheet1”).Select             ‘ コピー元のシートに切り替える

    ‘ セルに数値を設定
    For Row = 1 To 1000
        With Sheets(“Sheet1”)
            .Select                     ‘ コピー元のシートに切り替える
            .Cells(Row, 1) = Row        ‘ Row行1列にRowの値を設定
            Value = .Cells(Row, 1)      ‘ ValueにRow行1列の値を退避
        End With
        With Sheets(“Sheet2”)
            .Select                     ‘ コピー先のシートに切り替える
            .Cells(Row, 1) = Value      ‘ Row行1列にValueの値を設定
        End With
    Next

End Sub
実際には以下のように個々のセルをシート名で修飾すればシート切り替えは発生しませんが、画面更新を無効にすることにより処理速度の向上が見込まれます。

Sub Macro2()
    Dim Row As Integer

    ‘ 画面更新を無効にする
    Application.ScreenUpdating = False

    ‘ 出力列をクリア
    Sheets(“Sheet2”).Select             ‘ コピー先のシートに切り替え
    Columns(“A:E”).Select               ‘ A~E列全体を選択
    Selection.ClearContents             ‘ 選択範囲内をクリア
    Range(“A1”).Select                  ‘ シートの左上に戻る
    Sheets(“Sheet1”).Select             ‘ コピー元のシートに切り替える

    ‘ セルに数値を設定
    For Row = 1 To 1000
        Sheets (“Sheet1”)
            .Cells(Row, 1) = Row        ‘ Row行1列にRowの値を設定
            Value = .Cells(Row, 1)      ‘ ValueにRow行1列の値を退避
        End With
        With Sheets(“Sheet2”)
            .Cells(Row, 1) = Value      ‘ Row行1列にValueの値を設定
        End With
    Next
End Sub

[]

お知らせ

お知らせトップ

最近の記事
カテゴリー別に見る
月別に見る

sdgs_bear   職場いきいきカンパニーロゴ

テンリクスピードバナー

 

oshigotonagano