ヘルプの森~Excel・Access・Office全般ヘルプデスクサイト

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文のことろで、セルの値などを条件として、対象のシートのみ動作させるようにすることも可能です。

実行後は最後のシートがアクティブとなった状態で終わります。
必要であれば、特定のシートをアクティブにするよう最後に記述します。

関連ヘルプ

ブックを開くとき、閉じるときにマクロを自動実行したい 《イベント プロシージャ》
データを快速で検索するには 《Find》
アプリケーションを起動し動作させる 《Shell・SendKeys・Wait》
エラーの種類、そしてエラー処理の設置方法について 《On Error GoTo》
InputBox のテキスト ボックス入力時に日本語入力をオンにする 《SendKeys》
Excelのデータをテキスト ファイルに書き出す(出力する) 《Open・Print・Close》
ExcelからOutlookでメールを作成・送信する基本のVBA 《CreateObject関数》
Excelのメールアドレス データを使用し、Outlookのメールを自動送信する 《CreateObject関数》
ソートしたグループごとのデータを別ブックに分割するサンプルVBA
右クリック、印刷、上書き保存などブックに規制をかける 《イベント プロシージャ Cancel=True》
フォルダー内のすべてブックを開いて同じ処理を行う 《Do~Loop・Dir》
フォルダー内のすべての画像ファイルをペイントで開きサイズ変更
フォルダー内のフォルダーとファイルの一覧をセルに書き出す1 《Dir》
フォルダー内のフォルダーとファイルの一覧をセルに書き出す2 《FileSystemObject》
フォルダー内のファイル名を変更する 《Do~Loop・Dir・Name~As》
ColorプロパティとRGB関数について、Color値からRGB、RGBからColor値を求める方法 《Color・RGB関数》