エクセルでVBAを使って全てのシートで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
を指定する必要がありました。
コメント