エクセル小技・豆知識
これから少しずつ、エクセル小技豆知識をご紹介します。今まで困っていた作業がカンタンに片付くかも知れません。是非、お試しください。
説明:
通常、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
[エクセル小枝]