和風スパゲティのレシピ

日本語でコーディングするExcelVBA

すべてのシートをA1セル選択状態にするマクロ

すべてのシートをA1セル選択状態にして、
今のシートに戻ってくるマクロを紹介します。

提出するExcelをこの状態にするくだらない風習に付き合う時間を減らすためのマクロですね。


実行型の便利マクロですので、
Excel起動時に裏で開かれる「個人用マクロブック」などに搭載して使ってください。

ショートカットキーに登録したり、ツールバーやリボンにボタン配置すると便利です。

ソースコード

Sub すべてのシートのA1セルを選択する()

    Dim 元のアクティブシート As Worksheet
    Set 元のアクティブシート = ActiveSheet

    Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets
        ws.Activate
        ActiveWindow.ScrollRow = 1
        ActiveWindow.ScrollColumn = 1
        Range("A1").Select
    Next
    
    元のアクティブシート.Activate
End Sub

コードの解説

すべてのシートを順にアクティブにしていって、
A1セルを選択して回る単純なコードですね。


最初にActiveSheetを記憶しておき、
そのシートに戻る仕様にしています。


第1シートを選択状態にして終わりたい場合は、その部分を

Worksheets(1).Activate

に書き換えてください。


またウィンドウ枠を固定しているシートでは、
Range("A1").Select だけだと、
ウィンドウ枠の固定中のA1選択

↑このように表示を変えずにA1セルが選択できるため、
ウィンドウのスクロールをやってくれません。

なので、

ActiveWindow.ScrollRow = 1
ActiveWindow.ScrollColumn = 1

を入れておく必要があります。


最後にちょっと細かいですが、
このコードは非表示のシートに対しても問題なく動きます。

ワークシート.Activateは、非表示のシートも(そのマクロ実行中に限り)アクティブシートとして扱ってくれます。


今回のコードをws.Selectにすると、
非表示シートでエラーになりますので試してみてください。


この制限があるため、「全シートを選択⇒A1セルを選択」を行う

Worksheets.Select
Range("A1").Select

は使うことができず、For文をちゃんと回す必要があります。


(ワークシートの)ActivateメソッドとSelectメソッドの違いは、

  • Activateメソッドは非表示シートもOK
  • Activateメソッドは別ブックのシートもOK

です。

余裕があれば覚えておきましょう。



簡単なマクロですが、これを手でやろうとすると「こんなんやる意味ある?」という葛藤が必要になるため、なかなか重宝するマクロです。


マクロ自体「簡単だけど面倒な仕事を減らすためのプログラム」なので、
ある意味こういうプログラムこそが真のExcelマクロかもしれませんね。

ご活用ください。

おまけ:非表示のシートがアクティブという状態

ws.Activate
ActiveWindow.ScrollRow = 1
ActiveWindow.ScrollColumn = 1
Range("A1").Select

上記の説明の通りこの部分のコードは、非表示のシートにも実行されます。


上の説明では「そのマクロ実行中に限り」と書きましたが、
この状態でマクロが終了すると、表示されている隣のシートがアクティブになります。


「非表示のシートがアクティブという状態」はVBAさんでしか実現できず、
ユーザーに見せるときには近くにある表示シートにアクティブを移すということですね。


その延長で、このコードを「F8ステップ実行」で1行ずつ実行した場合は、
ActiveWindow部分以降は「表示されている隣のシート」に実行されてしまいます。

要するに1行ずつ実行したときと一括実行したときで処理が変わるということです。


ということで、今回のような簡単かつ重要でない処理でもなければ、
「非表示シートをActiveSheetとして扱う」のはやめておきましょう。


まあそんな注意書きをしなくても、そんなことめったにしないでしょうけどね(´∀`)