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

VBA Excel

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

広告

やりたいこと

以下のように、すべてのシートで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

スクリプトの解説

上記のスクリプトの中身を見ていきます。

3~5行目

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

ここでは Dim で変数を定義しています。↑

7行目

SheetCount = ThisWorkbook.Sheets.Count

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

9~14行目(メインの処理)

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

シートの数だけ処理を繰り返す必要があるため「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をコピーしました