管理栄養士のためのVBA入門!第6回:繰り返し処理を理解しよう

みなさん、こんにちは。

シンノユウキです。

今回は「管理栄養士のためのVBA入門」の第6回、以下の記事の続きです。

管理栄養士のためのVBA入門!第5回:条件分岐を理解しよう
みなさん、こんにちは。 シンノユウキです。 今回は「管理栄養士のためのVBA入門」の第5回、以下の記事の続きです。 前回は、変数と定数についての基本的な知識について解説しました。今回は条件分岐と呼ばれる、与えられた条件

前回は、条件分枝についての基本的な知識について解説しました。今回は繰り返し処理と呼ばれる、同じ処理を何度も繰り返すための方法をご紹介していきます。

では、行きましょう。

 

繰り返し処理の基本概念

初めに、繰り返し処理について紹介していきます。

プログラミングを行っていると、同じ処理を少し条件を変えて行っていきたい、という場合が多くあります。たとえば、セルに対する処理で、上のセルから下のセルに向かって、順番に処理していきたいという場合です。繰り返し処理は、こういった場合に、大きな効果を発揮します。

以下では、基本的な繰り返し処理を行う方法、For~Nextステートメントについて基本的な使い方を紹介していきます。

 

For~Nextステートメント

For~Nextステートメントを用いることで、処理を、予め指定した回数分だけ繰り返すことができるようになります。以下で、基本的な書き方や使用例などを確認していきましょう。

基本的な書き方

以下が基本的な書き方です。

For カウンタ変数 = 初期値 to 終値 Step 増減分
    繰り返す処理
Next カウンタ変数

カウンタ変数というのは、For~Nextのループを回す過程で、増減していく変数のことです。一般的に、i・j・kのどれかが用いられます。

初期値というのは、カウンタ変数の増減前の最初の値です。最初に処理が行われる際に、変数に入る値のことです。この初期値から、処理を繰り返すに従って、値が増減していきます。

そして、初期値をtoでつなぐことで終値を入力します。カウンタ変数が終値にまで達すると、繰り返しは終了となります。

終値にStepを繋げて増減分を入力します。増減分は、繰り返し処理が終わった際に、カウンタ変数から増減する値のことです。増減分を「2」とすると、繰り返し処理が終わった時点でカウンタ変数に2が加えられます。なお、増減分が「1」の場合は記述を省略することができます。

そして、繰り返す処理を記述し、Nextでくくります。

これがFor~Nextステートメントです。

 

では、実際に使用してみて、繰り返し処理がどんなものであるのかを確認してみましょう。

最初に、1~10までの数字を、順番にメッセージとして表示するプログラムを作成してみましょう。以下のようになれば正解です。

 

Sub lesson()
    Dim i As Long
    For i = 1 To 10
        MsgBox i
    Next i
End Sub

 

カウンタ変数をiとし、初期値を1、終値を10としました。Stepの後の増減分は1なので省略しています。

カウンタ変数:iに1を加えながら、それをMsgBoxで表示しています。

では、次は、セルA1から下に順番に1~10の数字を入れてみましょう。以下のようになれば正解です。

 

Sub lesson()
    Dim i As Long
    For i = 1 To 10
        Cells(i, 1).Value = i
    Next i
End Sub

 

カウンタ変数は初期値、終値は先ほどと同じですが、処理の内容が変わっています。Cellsの行インデックスにカウンタ変数を用いることで、下方向に繰り返し処理していくことができます。

 

入れ子にすることもできる

また、この繰り返し処理は入れ子にすることもできます。繰り返し処理の中に、さらに繰り返し処理を書くことで、2重に処理を繰り返すことができます。

例として、100マス計算をやってみましょう。以下の表をセルA1にコピーしてください。そして、クロスするセルに、その行と列のそれぞれの数字を足していってみましょう。

0 1 2 3 4 5 6 7 8 9
0
1
2
3
4
5
6
7
8
9

 

以下のようになれば正解です。

 

Sub lesson()
    Dim i As Long, j As Long
    For i = 2 To 11
        For j = 2 To 11
            Cells(i, j).Value = Cells(i, 1).Value + Cells(1, j).Value
        Next j
    Next i
End Sub

 

カウンタ変数iを行番号を指定する変数に、jを列番号を指定する変数としました。このように、繰り返し処理を入れ子にすることで、今回の例だと行方向だけでなく、同時に列方向にも処理を繰り返すことができるようになりました。

 

まとめ

今回は複雑なプログラムを作成する際に必要となる、繰り返し処理について説明しました。For~Nextステートメントは、その使い方次第で、どのような場面でも使用することができます。しっかりと理解しておきましょう。。

 

連載目次