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

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

twitter hatena line pocket

関連ヘルプ

ブックを開くとき、閉じるときにマクロを自動実行したい 《イベント プロシージャ》
データを快速で検索するには 《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関数》