2018年11月17日土曜日

全シートのセルのA1を選択する

割とよくやりがちな間違いは、各シートをループで回して、
    Workbooks(i).Worksheets(i).Activate
    Range("A1").Select
とうっかり書いちゃうんですが、これは期待した結果になりません。

どういうことかというと、実際にコードを書いて動かしてみるとわかるんだけど、シートを移動することになるので、
    Application.ScreenUpdating = False
をいれることになります。
そうすると、↓これは
こうなって↓欲しいのに
こうなっちゃいます。↓ 残念...


あと、タイトル行を固定してフィルタをかけてる表はよくありますが、これも...
こんな残念な結果になります↓(A1は選択されているけど、、スクロールしてない、、残念...。)

Application.Goto メソッド

シートの選択、セルの選択、ウィンドウ固定のスクロールを全部やってくれる、とても便利なメソッドがあるので、これを使います。

サンプルコード

選択しているシートやスクリーン更新の状態は、呼び出しの前後で変化すると使いにくくなりそうなので、元の状態に戻すようにしてます。
    Sub 全シートのA1セルを選択()
    
        Dim home As Worksheet
        Dim bScrUpdStatus As Boolean
        Dim ws As Worksheet
        
        ''初期状態を保存
        Set home = ActiveSheet
        bScrUpdStatus = Application.ScreenUpdating
        
        Application.ScreenUpdating = False
        
        With ThisWorkbook
            For Each ws In .Worksheets
                Select Case True
                Case InStr(ws.Name, "除外したいシート名") > 0
                    '何もしない'
                Case Else
                    Application.Goto reference:=ws.Range("A1"), scroll:=True
                End Select
            Next ws
        End With
        
        ''初期状態に戻す
        home.Activate
        Application.ScreenUpdating = bScrUpdStatus
    
    End Sub

0 件のコメント:

コメントを投稿