Excel塾のマクロ講座超入門15回 VBAのFor Each Next使い方
動画解説
VBAのFor Each Next使い方
動画版「Excel塾のマクロ講座超入門15回」です。
VBAのFor Each Next使い方は、団体さんの一人一人にお弁当を渡すと考える、Excel塾のマクロ講座超入門15回
For Each Next ステートメント がイマイチよくわからないという声をよく聞きます。
それは「団体さんの一人一人にお弁当を渡す」イメージで解決します。一人一人にあたるのがオブジェクト変数です。
つまづきポイントのオブジェクトについても解説しています
コレクション内のすべてのオブジェクトに対して同じ処理をする
For Each...Next ステートメントの構造を考える
特定のオブジェクトなどの関連する要素の集まりのことをコレクションといいます。
コレクションや配列に対して、一括して同じ処理を行う場合には、ForEach...Nextステートメントを利用します。
”猫さんず”という集合体があって、その中の一匹ごとの猫さん(オブジェクト)に対して、食事を与える、などというイメージならわかりやすいかと思います。
オブジェクトを格納する変数としての”猫さん”と複数の猫さんの集合体”猫さんず”
これらはすべてオブジェクトです。操作の対象物です。
For Each...Next ステートメントを使ったサンプル
以下のサンプルではセルという オブジェクトが変数です。
Dim セル As Range オブジェクトの種類は レンジです。
セルの集合体 セレクションの中の1つのオブジェクトということになります。
Sub foreachsample1() Dim セル As Range For Each セル In Selection セル.Interior.ColorIndex = セル.Row Next End Sub
このマクロを実行すると、セルの背景色が、セルの行番号と同じColorIndexに変更されます。
ColorIndexで色の番号を知るには良いですが、表の背景としては美しくないですね。
書式のみ消去してしまいましょう。
Sub 書式のみ消去() Selection.ClearFormats End Sub
ForEach...NextステートメントにIF文をネストする
今度は 選択範囲に対して”変数セル”の行番号を2で割って、 それが 割り切れたら、
.Interior.ColorIndexを34番にするという コードに変更してみます。
Sub foreachsample2() Dim セル As Range Selection.Interior.ColorIndex = 0 For Each セル In Selection If セル.Row Mod 2 = 0 Then セル.Interior.ColorIndex = 34 End If Next セル End Sub
続いて対象のオブジェクトをシートにして、コレクションをシートの集合であるWortksheetsにしてみましょう。
シートを 順番に チェックしていって シートの名前を A 1セルに記入されている文字列に変更します。
ForEach...Nextステートメントを使うと、シート名の変更なども簡単にできます。
サンプルでは、シート名にしたい文字列が各シートのA1に入力してありました。
Sub foreachsample3_シート名にする() Dim mysheet As Worksheet For Each mysheet In Worksheets mysheet.Name = mysheet.Range("A1").Value Next End Sub