ループには大きくわけて3つの種類がありますが、その中の「For~Next」について説明します。
Vループは非常に利用頻度が高く、その中でも今回のFor~Nextは使い勝手の良いループです。
指定した回数でカウンター式のループとなります。
それぞれサンプルデータと、コードを使用して説明します。
ループとセットで覚えると便利なIF文については「IF文の使い方と分岐方法」をご覧下さい。
For〜Nextの使い方
使い方
この「For~Next」は利用頻度が高く使いがったの良いループです。
カウントアップやカウントダウンで変数に数字を格納して処理をする際に使用します。
「For~Next」は「For 変数 = 開始値 To 終了値 Step 増減数」と記述します。
開始値と終了値は数値となり、Stepはループの増減数を数値で指定します。
Stepは省略可能で、省略した場合はデフォルトで1増加となります。
-1などマイナスを指定すると、指定数分減少します。
また、ループに使用する変数の「Next 変数」の変数も省略可能です。
カウントアップ
「For i = 2 To 8 Step 1」のように「For 変数 = 開始値 To 終了値 Step 増数」と記述し、「Next 変数」で終わります。
ForからNextの間に処理したい内容を記述します。
「Step 1」は省略可能で、省略するとデフォルトで1増加となります。
「Next i」の「i」も省略可能ですが、プロシージャ内にたくさんループが出てくると可読性が落ちますので、省略しないほうが良いです。
Sub Sample1()
Dim i As Long '数値型
For i = 2 To 8 Step 1
'処理
Next i
End Sub
カウントダウン
「For i = 8 To 2 Step -1」のように「For 変数 = 開始値 To 終了値 Step 減数」と記述し、「Next 変数」で終わります。
カウントアップと大きく違うところは、「8 To 2 Step -1」と大きい数字から、小さい数字へと指定して、Step -1と減少させることです。
Sub Sample2()
Dim i As Long '数値型
For i = 8 To 2 Step -1 '指定した値から値まで1ずつ減少してループする
'処理
Next i
End Sub
サンプルコード
行をループする
次のようなデータを用意しました。
こちらのデータのB列の値をループで合計したいと思います。
Sub Sample3()
Dim i As Long '数値型
Dim mySum As Long
For i = 2 To 8 Step 1 '2行目から8行目まで1ずつ増加してループする
mySum = mySum + Cells(i, 2) 'mySumという変数にB列のデータを順に加算していきます。
Next i
Cells(9, 2) = mySum 'すべて合計したらB9に出力します。
End Sub
B9に合計が算出されました。
Stepを指定する
次はStepを2にしてみた場合です。
Stepを指定すると、指定した数字ずつカウントが増減します。
Sub Sample4()
Dim i As Long '数値型
Dim mySum As Long
For i = 2 To 8 Step 2 '2行目から8行目まで2ずつ増加してループする
mySum = mySum + Cells(i, 2) 'mySumという変数にB列のデータを順に加算していきます。
Next i
Cells(9, 2) = mySum 'すべて合計したらB9に出力します。
End Sub
2,4,6,8行目のみ加算した結果がB9に出力されました。
列をループする
列のループも可能です。
次のデータは先程のデータを行と列を入れ替えたデータです。
Cellsの行に使用していた変数「i」を列と入れ替えると列のループになります。
Sub Sample5()
Dim i As Long '数値型
Dim mySum As Long
For i = 2 To 8 Step 1 '2列から8列目まで1ずつ増加してループする
mySum = mySum + Cells(2, i) 'mySumという変数にB列からH列をループして2行目の値を加算していきます。
Next i
Cells(2, 9) = mySum 'すべて合計したらI2に出力します。
End Sub
まとめ
「For~Next」は変数のカウンタで増減値を指定してループさせます。
行、列に限らずシートなどカウントアップ、ダウンでコントロールできるものは対応できるため、非常に使い勝手の良いループです。
書き方次第では大抵のループに対応出来ますので、ぜひ覚えてください。