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

No.001

アイコン ブック内のすべてのワークシートで同じ処理を行う 《For Each~Next》

Excel2003/2007/2010/2013

ワークシートの枚数が大量にあり各シートに同じ処理を行う、といったことはないですか。手作業だと数時間拘束されるような処理です。
さて、こんなときはVBAを使ってあっさりと終了したいものですね。

今回は、ブックにあるすべてのワークシートを次々に開き、同じ処理を行うための記述です。

For Each~Nextステートメントを使用し、次のような記述で処理ができます。

  Dim Ws As Worksheet
  For Each Ws In Worksheets
    Ws.Activate
    処理内容
  Next Ws

For Eachステーとメントは、コレクションの各要素に対してコードを繰り返し実行するものです。

まず1行目、変数宣言が必要です。今回はワークシートの変数を用意します。
「For Each」の行、「In」のあとは、コレクションや配列を指定します。
次の「Ws.Activate」がないと、はじめのシートのみの実行となります。
最後は「Next」を忘れないようにします。

また特定のシート名のみ動作させる場合やシート内の内容によって処理を変更する場合は、IF文などを使用して処理します。

特定のシート名(「あ」を含むシート名)の場合のみ処理する例です。

  Dim Ws As Worksheet
  For Each Ws In Worksheets
    Ws.Activate
    If Ws.Name Like "*あ*" Then
      処理内容
    End If
  Next Ws

実行後は最後のシートがアクティブとなった状態で終わります。

関連ヘルプ

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