【Excel】VBAを使って全てのシートでA1を選択させてみた

VBA Excel

エクセルでVBAを使って全てのシートでA1を選択させてみました。

絵にすると以下のようなことをやります。

全てのシートでA1を選択する
広告

VBAスクリプト

今回実装したスクリプトは以下です。

Sub Macro()

Dim i As Long
Dim SheetCount As Long
Dim SheetName As String

SheetCount = ThisWorkbook.Sheets.Count

For i = 1 To SheetCount
    SheetName = Sheets(i).Name
    Sheets(SheetName).Activate
    Range("A1").Select
    ActiveWindow.Zoom = 100
Next i

End Sub

スクリプトの解説

上記のスクリプトを解説していきます。

Dim i As Long
Dim SheetCount As Long
Dim SheetName As String

3~5行目は Dim で変数を定義しています。↑

SheetCount = ThisWorkbook.Sheets.Count

7行目では、 今開いているエクセルファイルのシートの数を取得します。↑
その取得した値は「SheetCount」に格納して後の処理で利用します。

For i = 1 To SheetCount
    SheetName = Sheets(i).Name
    Sheets(SheetName).Activate
    Range("A1").Select
    ActiveWindow.Zoom = 100
Next i

9~14行目がメインの処理です。↑
まず、シートの数だけ処理を繰り返す必要があるため「for」を利用し、先ほど取得した「SheetCount」の値まで繰り返し実行させます。

for 内の処理は、以下のような処理をしています。
 10行目:それぞれのシートの名前を格納して、
 11行目:そのシートをアクティブにして、
 12行目:そのシートでA1を選択して、

 13行目:そのシートの倍率を100にする

最後の倍率の調整は不要であれば消しても問題ありません。

[躓いた点] Sheets(SheetName).Activate が大事

このスクリプトを作成しているときに、最初、以下のように記載してしまっていて、
11行目の部分で「rangeクラスのselectメソッドが失敗しました」と出てきてうまくいきませんでした。

Sub Macro()

Dim i As Long
Dim SheetCount As Long
Dim SheetName As String

SheetCount = ThisWorkbook.Sheets.Count

For i = 1 To SheetCount
    SheetName = Sheets(i).Name
    Sheets(SheetName).Range("A1").Select
    ActiveWindow.Zoom = 100
Next i

End Sub

いろいろ試して解決した結果、これはアクティブになっていないシートに対して処理をしようとしてエラーが発生しているということが分かりました。

例を挙げて詳しく説明すると、
このマクロを起動した場所が「Sheet1」だとしたときに、

1回目の処理では「Sheet1」が i の値として取得され、11行目の「Sheets(SheetName(₌Sheet1)).Range(“A1”).Select」では今開いているシート、すなわち「Sheet1」に対して処理が実行されるので、処理は成功します。

しかし、2回目の処理では「Sheet2」が i の値として取得され、11行目の「Sheets(SheetName(₌Sheet2)).Range(“A1”).Select」では今開いているシート、すなわち「Sheet1」に対して処理が実行され、「シートが異なるので」処理は失敗します。

なので、それぞれのシートを処理させるためには、

Sheets(SheetName).Activate

を指定する必要がありました。

コメント

タイトルとURLをコピーしました