No.001
ブック内のすべてのワークシートで同じ処理を行う 《For Each~Next》
2003/2007/2010/2013/2016/2019
ワークシートの枚数が大量にあり各シートに同じ処理を行う、といったことはないですか。手作業だと数時間拘束されるような処理です。
さて、こんなときはVBAを使ってあっさりと終了したいものですね。
今回は、ブックにあるすべてのワークシートを次々に開き、同じ処理を行うための記述です。
For Each~Nextステートメントを使用し、次のような記述で処理ができます。
Dim Ws As Worksheet
For Each Ws In Worksheets
Ws.Activate
処理内容
Next Ws
For Eachステーとメントは、コレクションの各要素に対してコードを繰り返し実行するものです。
まず1行目、変数宣言が必要です。今回はワークシートの変数を用意します。
「For Each」の行、「In」のあとは、コレクションや配列を指定します。
今回ワークシートのコレクションということで、「Worksheets」と最後に「s」が付いています。
次の「Ws.Activate」がないと、はじめのシートのみの実行となります。
最後は「Next」を忘れないようにします。
また特定のシート名のみ動作させる場合やシート内の内容によって処理を変更する場合は、IF文などを使用して処理します。
特定のシート名(「あ」を含むシート名)の場合のみ処理する例です。
Dim Ws As Worksheet
For Each Ws In Worksheets
Ws.Activate
If Ws.Name Like "*あ*" Then
処理内容
End If
Next Ws
もちろん、If文のことろで、セルの値などを条件として、対象のシートのみ動作させるようにすることも可能です。
実行後は最後のシートがアクティブとなった状態で終わります。
必要であれば、特定のシートをアクティブにするよう最後に記述します。