あるグループ内のすべての要素に対して、繰り返し処理をする場合に便利な構文です。例えばファイル内のすべてのシートや、セル範囲の中のすべてのセルに対して処理する場合に使います。
Tips
「繰り返し」構文の1つ「For ~ Next」文
「繰り返し」構文の1つ「Do ~ Loop」文
では早速ですが、まずはサンプルファイルを準備して頂いてから、下図のVBAサンプルコードを真似て書いてみてくださいね。
1 2 3 4 5 6 7 8 9 10 11 12 13 | Option Explicit 'すべてのワークシートから、1つ1つのワークシートを取り出して処理をする Sub Sample013() Dim wstSelf As Worksheet '1つのワークシートを順次代入するためのオブジェクト変数 'すべてのワークシートに対し、ひとつづつ処理を繰り返す For Each wstSelf In Worksheets MsgBox wstSelf.Name 'ワークシート名を表示 Next End Sub |
それと今回は実行する前に、準備したサンプルファイルに下記のように複数のExcelワークシートがある状態にしておいてください。
枚数は適当で構いませんので、足りなければワークシートの挿入操作で2, 3枚追加しておいてください。
では、プロシージャのカーソル位置を確認した後に、▶ボタンか「F5」キーを押してVBAコードを実行してみてください。
実行すると下の例のように、ワークシート名がMsgbox関数により順次表示されます。すべてのシート名が表示されましたか。
では、続きましてVBAコードの詳細ついてお話ししますね。
5行目:Dim wstSelf As Worksheet
変数「wstSelf」は、ワークシートを扱うオブジェクト変数として定義しています。ちなみに、変数名の先頭3文字は、ワークシートオブジェクト型の略「wst」になります。
また後ろの「Self」は、わたしの場合よく使っているのですが、「処理の中心にある~」(~には、ワークシートとかワークブックとかが入ります)という意味合いでつけています。
たとえば、複数のワークシートを1つの取り纏めシートにまとめる集計業務をする際は、取り纏めシートには変数「wstSelf」を使い、他の複数のワークシートは、変数名に「wstData」(データを提供してくれるシートたちなので)を使います。
Tips
VBAコードの変数名のつけ方
8行目~12行目:For Each ~ Next
今回の主役のコードになりますので、下図に沿って詳しくお話ししますね。
まず①のFor Eachですが、英語「Each」の日本語の意味「それぞれの~、各~」からでも想像できますように、その後ろにつづく変数「wstSelf」を「一つ一つ全部について繰り返し処理しますよ」と言う意味あいになります。
よって、今回の場合は変数「wstSelf」にはワークシートが入りますので、すべてのワークシート1つ1つに対する処理を繰り返すということになります。
つぎに②ですが、 まず英語の「In」は日本語の意味「~の中の、〜の中に」のように使われますので、「In」の後ろに続く名詞(この場合「Worksheets」)「の中」ということですね。
そうなると、Inの後ろは個体が集まったグループのようなものが入るんだと理解できそうです。
そして今回の場合、そのグループに相当するのは「Worksheets」になるのですが、ここで注目してほしいのは、単語「Worksheet」が複数になっていることです。
Worksheetの複数形Worksheetsが意味するところは、「Excelファイルの中にある複数のWorksheet」という意味です。まさにグループですよね。
よって、「In Worksheets」というのは「ExcelファイルのすべてのWorksheetの中で」と考えることができますね。
10行目:MsgBox wstSelf.Name
For Each ~ Nextの中で繰り返し実行されるVBAコードになります。この変数「wstSelf」には、「Worksheets」コレクションの中から順次取り出された1つの「Worksheet」が入ります。
そのうしろの「.Name」は、英語の意味の通り「名前」になりますので、wstSelf.Nameでワークシート名を表し、それをMsgBox関数で表示させています。
Tips
MsgBox関数の使い方
まとめ
VBAコードの繰り返し構造を形成する代表的な構文For Each ~ Next文についてお話ししました。経験上、For ~ Next文よりは使用頻度が少ない構文ですが、フォルダ内のすべてのファイル処理や、ブック内のすべてのワークシートに対する繰り返し処理をする上で、大変便利ですのでこちらもぜひ使い方をマスターしてくださいね。
Tips:For Each ~ Next文以外のVBA基本構文
For ~ Next文(繰り返し)
Do ~ Loop文(繰り返し)
If文(分岐)
Select文(分岐)