For 〜 Next文は、繰り返し処理の代表的な構文です。個人的には、For Each文や、Do 〜 Loop文よりも頻繁に使うVBAコードです。
VBAコードの3つの基本構造の1つ、「繰り返し」構造で使用される構文パターンには、以下の3つがあります。
- For~Next文
- For Each ~ Next文
- Do ~ Loop文
今回は、この中の「For ~ Next」文についてご紹介したいと思います。
では、つぎに今回利用するサンプルシートをご紹介します。
VBAのFor~Next文
それでは今回のVBAサンプルコードをご紹介します。ぜひ真似して書いてみてくださいね。
1 2 3 4 5 6 7 8 9 10 11 12 13 | Option Explicit '果物それぞれの「商品名」を調べる Sub Sample012() Dim r As Long '行(Row)方向の繰り返し処理用変数 For r = 2 To 16 'レコードの存在する行番号(2~16)に対し繰り返す MsgBox "商品名 : " & Cells(r, 2) '商品名をMsgboxウィンドウに表示する Next End Sub |
このコードは、すべてのレコードの商品名をMsgBox関数で表示させるものです。
では、早速実行してみましょう。カーソルがプロシージャ内にあることを確認してから、▶ボタンか「F5」キーを押してみてくださいね。
どうでしたか。先頭レコードの「リンゴ」から、最終レコードの「イチジク」まで、MsgBox関数により順番に表示されたでしょうか。レコード数は15個ですので、OKボタンも15回押した後に終了したかと思います。
では、次にコードのお話しに移ります。
5行目:Dim r As Long
行番号を代入するための変数になります。変数名「r」は「行」の英語の意味「Row」の頭文字からとっています。今回の例は、この変数rに処理の対象となるレコードの行番号を順次入れてます。
7~11行目:For r = 2 to 16 ~ Next
繰り返しパターンの代表的構文のひとつです。この間に、繰り返す処理内容を書きます。For のあとの 「r =2 to 16」は、「変数rが2から16までの間、For ~ Nextの部分を繰り返し実行しなさい」という意味になります。
もう少し詳しくお話ししますと、下図のようにForの次の変数rは値を変化させる変数で、その変化させる初回の値は「=」をはさんで「2」になります。
そして、英字「to」は日本語の意味で「~まで」と訳せるように、toの後ろは、最終回の値「16」を書くところになります。これより、ワークシートの行番号2から行番号16までの15レコード分、1行1行実行するということになりますね。
今回のサンプルでは、行番号を保持する変数「r」を変化させて繰り返し処理を行っています。
9行目:MsgBox "商品名 : " & Cells(r, 2)
この部分は、For ~ Next文の中にあって、繰り返し実行されるVBAコードになります。ここで「&」という初めて見る文字がありますね。この「&」はアンバサンドと呼ばれ、文字列と文字列を結合する便利な文字として使用されます。
「Cells(r, 2)」も新しく出てきましたね。これは、Excelワークシート上の1つのセルを表しています。はじめの「Cells」と複数になっているのは、ワークシート上の複数のセルのことを表しています。
そのCellsの中から、「(r, 2)」という、行と列情報が入った部分をくっつけて特定のセルを指定しているのです。この例では、rはレコードの行番号を、2はレコードの列番号でワークシート2列目の「商品名」を特定しています。
まとめると、前半の「商品名 : 」という文字列と、ワークシート上から取得した商品名(文字列)を「&(アンバサンド)」で結合した結果を、MsgBox関数で下記のように表示させてます。
Tips
MsgBox関数の使い方
まとめ
VBAの繰り返し構造を形成する代表的な構文For~Next文を紹介しました。順次進行に並んで、VBAコードの基本構造ですのでぜひ使い方をマスターしてくださいね。
Tips:For ~ Next文以外のVBA基本構文
For Each ~ Next文(繰り返し)
Do ~ Loop文(繰り返し)
If文(分岐)
Select文(分岐)