VBA Basic10
第10章 ループ処理(For Nextステートメント)
ループ処理とは同じ処理の繰り返しのことです。プログラミングにおいては、ループ処理も条件判定と同じようによく使います。繰返しの処理があるから自動処理が便利になります。ただプログラミングになれなていないと、ループ処理は変数・条件分岐以上にハードルが高いです。
Excelは表計算なので、縦の行方向にも横の列方向にもセルが連続しています。 連続したセルに同じ操作を繰り返すとなるとどうしてもループ処理は欠かせません。
例えば、10行のデータがあって、各行に売上額があって、各行に消費税の課税・非課税の税区分があります。10行すべてに消費税の計算をするという処理があったとします。
●行の税区分が非課税なら消費税は0、課税なら売上額と税率で計算
Ifステートメントの処理だけだと、1行しか処理しないので、10行処理するには、10回同じような処理を記述します。10回も記述するなら、手作業よりVBAの記述の方が面倒です。
ループ処理を使うと1行の処理を行数分繰り返すとことになります。
●これから10行以下の処理を繰返す
●行の税区分が非課税なら消費税は0、課税なら売上額と税率で計算
繰返す回数を指定してから処理を行うだけの記述になります。このループ処理を行うときに使うのがFor Nextステートメントです。ループ処理の記述方法は以下のとおりです。
For カウンター = 初期値 To 終了値
繰返す処理
Next
カウンターの変数は長整数型として定義しておきます。カウンターの定義は以下のようになっていることが多いです。初期値は繰り返しの最初の数値、終了値は繰り返しの最後の数値を指定します。1行目から10行目まで繰り返す場合は 初期値が1で、終了値が10になります。
セルA1~A10に単価の数値があって、セルB1~B10まで数量の数値があった時に、 A列の単価とB列の数量を掛けてセルC1~C10に金額の数値を入れるという処理は以下のようになります。
Dim i As Long
For i = 1 To 10
Cells(i, 3).Value = Cells(i, 1).Value * Cells(i, 2).Value
Next
ループ処理の中に、条件分岐を入れたり、ループ処理をネストすることもできます(むしろそういう使い方が多いです)。ただし ループ処理の中にループ処理をネストする場合は、3階層程度までにします。 Excelのシートは行と列の2次元なので、できればループ処理は2階層で納めることが望ましいです。
ループ処理に、条件分岐をネストする処理を紹介します。10行繰返した単価と数量の金額計算を、単価と数量がいずか一方が未入力であれば金額は計算しない、両方入力されていたら金額を計算する処理は以下のとおりです。
Dim i As Long
For i = 1 To 10
If Cells(i, 1).Value = "" Or Cells(i, 2).Value = "" Then
Cells(i, 3).Value = ""
Else
Cells(i, 3).Value = Cells(i, 1).Value * Cells(i, 2).Value
End If
Next
この処理は比較的単純な処理ですが、変数・条件分岐・ループ処理を使っています。
またループの回数が増える場合は終了値の値を変えれば済みます。
ループ処理は慣れてしまうと、頭の中で繰り返しの処理が思い浮かべてすらすら作成できます。慣れないうちは処理をフローチャートにしてから記述するようにします。上のループ処理をフローチャートにすると下のようになります。
フローチャートのように流れができれば、フローチャートに従ってループ処理をするだけです。まずは繰り返しの流れを理解することが、ループ処理を修得する一歩となります。