サイト内検索

VBA基本構文 基本

VBAコードの繰り返し(For Each~Next文)

あるグループ内のすべての要素に対して、繰り返し処理をする場合に便利な構文です。例えばファイル内のすべてのシートや、セル範囲の中のすべてのセルに対して処理する場合に使います。

Tips
「繰り返し」構文の1つ「For ~ Next」文
「繰り返し」構文の1つ「Do ~ Loop」文

では早速ですが、まずはサンプルファイルを準備して頂いてから、下図のVBAサンプルコードを真似て書いてみてくださいね。

 

それと今回は実行する前に、準備したサンプルファイルに下記のように複数のExcelワークシートがある状態にしておいてください。

Excelワークシート名が複数表示されている
ワークシートを複数用意しておいてね!

枚数は適当で構いませんので、足りなければワークシートの挿入操作で2, 3枚追加しておいてください。

では、プロシージャのカーソル位置を確認した後に、▶ボタンか「F5」キーを押してVBAコードを実行してみてください。

実行すると下の例のように、ワークシート名がMsgbox関数により順次表示されます。すべてのシート名が表示されましたか。

MsgBox関数出力結果「Samplesheet01」
サンプルファイルにあるすべてのシート名が表示される(図はサンプルシートが処理対象のとき)

では、続きましてVBAコードの詳細ついてお話ししますね。

5行目:Dim wstSelf As Worksheet
変数「wstSelf」は、ワークシートを扱うオブジェクト変数として定義しています。ちなみに、変数名の先頭3文字は、ワークシートオブジェクト型の略「wst」になります。

また後ろの「Self」は、わたしの場合よく使っているのですが、「処理の中心にある~」(~には、ワークシートとかワークブックとかが入ります)という意味合いでつけています。

たとえば、複数のワークシートを1つの取り纏めシートにまとめる集計業務をする際は、取り纏めシートには変数「wstSelf」を使い、他の複数のワークシートは、変数名に「wstData」(データを提供してくれるシートたちなので)を使います。

Tips
VBAコードの変数名のつけ方

8行目~12行目:For Each ~ Next
今回の主役のコードになりますので、下図に沿って詳しくお話ししますね。

VBAコードのFor Each~In Worksheets説明
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文(分岐)

[スポンサーリンク]



サイト内検索

-VBA基本構文, 基本
-

Copyright© 集計用VBAサンプルコードをやさしく学ぼう , 2020 All Rights Reserved.