For Each ~ Nextステートメント

For Each ~ Nextは、コレクション中のすべてのオブジェクトに対して、連続して処理を実行します。処理する順番は指定できませんが、すべてのオブジェクトに対する処理を解決に記述できます。

目次

すべてのワークシートの名前をセル「A1」に入力する

Sub for_each_next()
    For Each w In Worksheets
        w.Range("A1").Value = w.Name
    Next
End Sub

For Each ~ Nextステートメント

「処理の対象をオブジェクト」と呼び、「オブジェクトの集まりがコレクション」と呼びます。コレクションに含まれるすべてのオブジェクトに対して処理を実行するのがFor Each ~ Nextステートメントです。For ~ Nextは繰り返しの回数を決めて実行しますが、For Each ~ Nextはコレクションに含まれるオブジェクトの数だけ処理を繰り返します。

  • For Each ~ Nextステートメント

For Each 変数名 In コレクション

 繰り返す処理

Next

「コレクション」が持つすべてのオブジェクトを、「変数名」に次々と代入しながら、「繰り返す処理」を繰り返し実行します。ただし、処理するオブジェクトの順番を指定することはできません。

すべてのワークシートに対して処理

ブックに存在するすべてのワークシート(Worksheetオブジェクト)は、Worksheetsコレクションで表すことができます。サンプルプログラムでは、すべてのワークシートが順番に変数wに代入されます。

そしてWorksheetオブジェクトのNameプロパティは、ワークシートの「ワークシート名」を返します。Nameプロパティで取得したワークシート名を、各ワークシートのせる「A1」に書き込んでいます。たとえば次のような処理を行っているのと同じです。

Worksheets(“Sheet1”).Range(“A1”).Value = Worksheets(“Sheet1”).Name

Worksheets(“Sheet1”).Range(“A1”).Value = Worksheets(“Sheet1”).Name

Worksheets(“Sheet1”).Range(“A1”).Value = Worksheets(“Sheet1”).Name ・・・

関連知識

セル範囲D5:M14の数値をすべて100倍にする

Rangeオブジェクトは1つのセルを表す場合も、複数のセルを含むセル範囲を表す場合もRangeオブジェクトといい、Rangeコレクションとはいわないという話をしました。

次の例ではFor Each ~ Nextステートメント中で「For Each c In Range(・・・)」のように使っています。つまりこのサンプルでRangeは「コレクション」として働いているのです。このようにRangeコレクションとはいわないが、コレクションとして使用できることを覚えておいてください。

For Each c In Range("D5:M14")
 c.Value = c.Value * 100
Next

入力されていないセルだけ黄色で塗りつぶす

これもRangeがコレクションとなり、「For Each ~ Next」でそのすべてのセルに対して処理する例です。

セル範囲D5:M14のすべてのセルに対し、その1つのセルの値を「c.Value」としてこれが””だったら、そのセルを黄色に塗りつぶします。

Sub 入力されていないセルは黄色()
 For Each c In Range ("D5:M14")
  If c.Value = "" Then
   c.Interior.Color = vbYellow
  End If
 Next
End Sub
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次