注目キーワード
  1. VBA
  2. 関数
  3. ショートカット

【VBA】For~Nextステートメントをマスターしよう!【基本~応用まで】

  • 2019年3月26日
  • 2019年3月28日
  • VBA
  • 70回
  • 0件
VBA NO IMAGE

【ExcelVBA】For~Nextステートメントをマスターしよう!

For~Nextステートメントを使っていますか?

For~Nextステートメントは、繰り返す回数をあらかじめ指定して処理を実行できるステートメントです。

この記事ではFor~Nextステートメントの

基本的な使いかたはもちろん。

状況に応じた使いかたを紹介します。

 

For~Nextステートメントとは?

For~Nextステートメントは処理の実行回数を指定して、指定回数に到達するまで繰り返し処理を行うステートメントです。

For~Nextステートメントの基本的な記述は以下のようになります。

For 変数名 = 開始値 To 終了値
処理を記述
Next 変数名

「For~Nextステートメント」で1から5までカウントする

1から5までの連続した数値を、順番にメッセージ画面に表示します。For~Nextステートメントでは、先頭の行で「For 変数名 = 開始値 To 終了値」のように指定すると、変数を1づつ増加させながら、開始値から終了値まで「Next」の行までの処理を繰り返します。

Sub test ()
 Dim i As Integer ‘変数 i に整数型で宣言する
 For i = 1 To 5 ‘初期値に1を代入する
 Msg Box i ‘メッセージ画面に変数 i を表示させる
 Next i ’Forに戻って変数 i に2を代入させる
End Sub

「For~Nextステートメント」で「Step」を使って減少するデータを入力する

初期値に15を代入してメッセージ画面に表示して繰り返すたびに3ずつ引いたデータを表示するコードです。

Sub test ()
 Dim i As Integer ‘変数 i を整数型で宣言する
 For i = 15 To 0 Step -3  ‘初期値に15を代入する
 MsgBox i ‘メッセージ画面に変数 i を表示する
 Next i ‘Forに戻って変数 i から3引いた数値を代入する
End Sub

「For~Nextステートメント」で「Ifステートメントを使う」

For~Nextステートメントで条件を指定して条件に一致した場合には処理を実行して、ループを回す方法もあります。

次のコードはセルが数値以外かを調べて数値の場合だけ処理を実行して、数値以外の場合では処理をせずに次のループに入ります。

Sub test ()
 Dim i As Integer ‘変数 i を整数型で宣言する
 For i = 1 To 5 ‘初期値に1を代入する
 If  IsNumeric(Range(“B” & i )) Then ‘数値か判定する
 MsgBox Range(“B” & i).Value ‘メッセージ画面にセルの値を表示する
 End If
 Next i ‘Forに戻って変数 i に1増加した数値を代入する
End Sub

「For~Nextステートメント」の「Exit For」でループを途中で抜ける

For~Nextステートメントでは繰り返しの処理を指定回数に到達するまででも別に条件を指定して条件に当てはまった場合にループを抜ける方法もあります。

次のコードでは(B1)セルを下方向に移動させながらメッセージ画面に表示していきます。変数を1から5まで増加させますが、それまでにセルの値が数値以外になったら「Exit For」でループから抜けます。

Sub test ()
 Dim i As Integer ’変数 i を整数型で宣言する
 For i = 1 To 5 ’初期値に1を代入する
 If Not IsNumeric(Range(“B” & i )) Then Exit For ‘数値以外か判定する
 MsgBox Range(“B” & i).Value ’メッセージ画面にセルの値を表示する
 Next i ’Forに戻って変数 i に1増加した数値を代入する
End Sub

「For~Nextステートメント」を「複数」使う(ネスト)

For~Nextステートメントでは行に対して行った処理を列を移動させてからまた行に対して処理を行いたい場合もあります。
その場合はFor~Nextステートメントを複数使って処理を記述します。
次のコードでは行に順番に数値を入力してから列を移動してさらに行に数値を順番に入力しています。

Sub test ()
 Dim i As Integer , y As Integer ‘変数 i と変数 y を整数型で宣言する
 For y = 1 To 5
 For i = 1 To 5
 Cells( i , y ).Value = i 
 Next i ‘変数 i が5まで増加したらNext yに進む
 Next y ‘変数 y を1増加させてFor i Nextのループに戻る
End Sub

「For~Nextステートメント」の開始値・終了値に「最終行または最終列」を指定する

For~Nextステートメントで繰り返す回数が最終行や最終列の数によって変わってくる場合は終了値に最終行・列を数値として指定すると使用環境によって表の行や列の長さが変わったりした場合にも対応できます。

Range(“A1”).End(xlDown).Row     ‘指定したセルから空白の行まで
Range(“A1”).End(xlToRight).Column    ’指定したセルから空白の列まで

上記のコードだと途中で空白がある場合には途中で処理が終了してしまうのでそれに対応させるにはワークシートの最終行または列からデータが入力されているセルまでを取得できるコードで対応します。

Cells(Rows.Count, 1).End(xlUp).Row      ’最終行から入力データまで
Cells(1, Columns.Count).End(xlToLeft).Column ‘最終列から入力データまで

まとめ

今回は、For~Nextステートメントの基本記述から応用までを紹介しました。
紹介したすべての記述方法はよく使用しますので使いかたを繰り返し使って
覚えるとVBAで出来る処理が広がります。

次回は、繰り返し処理が出来る別のステートメントを紹介します。
覚えるほどに楽しくなるExcelVBAをマスターしましょう!

Do~Loopステートメントを覚えたい場合は下記の記事を参考にしてください。

【VBA】Do~Loopステートメントをマスターしよう!【基本~応用まで】

For~Eachステートメントを覚えたい場合は下記の記事を参考にしてください。

【VBA】For~Eachステートメントをマスターしよう!【基本~応用まで】

NO IMAGE
最新情報をチェックしよう!