3日がかりのその仕事、3分で終わらせる方法教えます!
パソコンスキルの心技体

Application.ScreenUpdating = False/True で挟まれたコードをインデントしたい?

2013年6月2日
  • このエントリーをはてなブックマークに追加
  • follow us in feedly

エクセルマクロ・VBA達人養成塾 小川です。

今日は、VBAのテクニカルな話。

[1] Applicationオブジェクトのプロパティを切り替えてから
[2] やりたい処理を実行し
[3] それからApplicationオブジェクトのプロパティ元に戻す

といった処理の流れでプログラムを書くことはよくあります。

全体の流れとしては、 [1] と [3] の処理はセットの中に、 [2] の処理が入っているわけです。

ここで、この手の処理の流れのプログラムを書くとき、メンテナンス性のために、

Application.ScreenUpdating = False/True で挟まれたコードを一段右にインデントして表示したくなることもあります。
つまり、以下の感じ。

[1]
    [2]
[3]

例えば、僕の手元に、今こんなサンプルコードがあります。

Sub SortAct()
    Application.ScreenUpdating = False '[1]
    
    Worksheets("main").Range("A").CurrentRegion.Sort _
            Key1:=.Range("F6"), Order1:=xlAscending, _
            Key2:=.Range("G6"), Order2:=xlAscending, _
            Header:=xlYes '[2]
    
    Application.ScreenUpdating = True '[3]
End Sub

これの、 .Sort メソッドのところを一段インデントさせたい。

しかし、明示的な入れ子構造もないところで理由もなくインデントするのはナンセンス。

ということで、どうするか。

With Application … End With でくくってしまう、というのはいちおうありそうです。

こんな感じ↓。

Sub SortAct_indent()
    With Application
        .ScreenUpdating = False '[1]
        
        Worksheets("main").Range("A").CurrentRegion.Sort _
                Key1:=.Range("F6"), Order1:=xlAscending, _
                Key2:=.Range("G6"), Order2:=xlAscending, _
                Header:=xlYes '[2]
        
        .ScreenUpdating = True '[3]
    End With
End Sub

[2] の部分が長くつづくと、 [1] に対応する [3] を見つけるのがとても大変になります。
[3] のコードを入れるタイミングも逃しかねない。

ですが、このスタイルで書けば、いちおうそういう問題は起こりにくくなります。

キーワード

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

最新の記事

人気記事

最新記事

カテゴリ

最新コメント

タグクラウド