【Excel/VBA】For~Nextを使用した繰り返し処理

繰り返し処理において、非常に大切なことが、繰り返し処理を抜けることです。
”非常に大切”どころではないですね。絶対必要です。
そうでないと、永遠に繰り返されてしまいます。

では、繰り返し処理を抜けるには、どのようにすればよいでしょうか。
大きく、二つの方法があります。
  1. 条件を設定して、それに合致した場合に、繰り返しを抜ける
  2. 予め、繰り返す回数を設定しておく
今までは、1の「条件を設定しておく」方法を取りました。
※ちなみに、前述した方法以外でも、Do~Loopにて繰り返し処理を抜ける方法はあります。
 それは、また今度。

今回は、2の「繰り返す回数を設定しておく」方法を取ります。

1.For~Nextの構文

〜〜〜ここから〜〜〜
For 変数 = 初期値 To 最終値
 実施する処理
Next 変数
〜〜〜ここまで〜〜〜

2.変数の設定

いきなりですが、構文は上記の通りです。
ここで”変数”というものが出てきます。
変数を説明するにあたって、最適なワードは何か考えていたのですが、
「箱」という考え方が、一番シックリきますので、「箱」と捉えます。
  • 箱は自由に名前を決められる
  • 箱の中身は自由に入れ替えられる
なお、変数を使用する際は、「使用します」と記述内で宣言する必要があります。
その場合は、「Dim」を使います。※Dimは、Dimensionの略です。
そして、Dimの後に、好きに決めた変数の名前を書きます。
最後に、「As 〜〜」と、変数のデータ型を指定します。

〜〜〜ここから〜〜〜
Dim i As Integer
〜〜〜ここまで〜〜〜

こんな感じです。
変数は「i」にしました。変数を数値にする場合、iとすることが多いです。
また、Integerは、整数型(-32,768 ~ 32,767)意味します。
また、よく使うデータ型として、String(最大約20億文字)があります。
使えるデータ型は、まだまだ多くありますが、一旦は、上記二つを覚えましょう。

3.For~Next構文に変数をセット
では早速、変数をセットしてみましょう。

〜〜〜ここから〜〜〜
Dim i As Integer
    
For i = 初期値 To 最終値
    実施する処理
Next i
〜〜〜ここまで〜〜〜

Dim i(iという名前の変数を使います) As Integer(それは整数です
For i = 初期値 To 最終値(変数iは、初期値から最終値まで
    実施する処理
Next i(次の値に進む
このようになります。
では、最後に初期値〜最終値と、実施する処理を書いてみましょう。

4.For~Next文を完成させる

相変わらず、「いつ使うんだ?」というサンプルですが、
1から10まで足してみようと思います。1+2+3+…+10なので、答えは55です。
それを実行する文は、以下の通りです。

〜〜〜ここから〜〜〜
Sub 一から十の足し算()
    
    Dim i As Integer
    
    For i = 1 To 10
        Range("A1").Value = Range("A1").Value + i
    Next i

End Sub
〜〜〜ここまで〜〜〜

ここから少し長くなりますが、iが1から10まで進む際の処理を説明していきます。
  • iが1の場合
    Range("A1").Valueは空欄なので便宜上0とし、iは1なので、
    Range("A1").Value = Range("A1").Value + i
    →Range("A1").Value = 0 + 1 となり、A1セルには1という値が入ります。
    そして、「Next i」で、iは次の値に移ります。
  • iが2の場合
    Range("A1").Valueは1、iは2なので、
    Range("A1").Value = Range("A1").Value + i
    →Range("A1").Value = 1 + 2 となり、A1セルには3という値が入ります。
    そして、「Next i」で、iは次の値に移ります。
  • iが3の場合
    Range("A1").Valueは2、iは3なので、
    Range("A1").Value = Range("A1").Value + i
    →Range("A1").Value = 2 + 3 となり、A1セルには5という値が入ります。
    そして、「Next i」で、iは次の値に移ります。


  • iが10の場合
    Range("A1").Valueは45、iは10なので、
    Range("A1").Value = Range("A1").Value + i
    →Range("A1").Value = 45 + 10 となり、A1セルには55という値が入ります。
    そして、iは10が最終値となるので、繰り返し処理が終わります。
結果的に、A1セルに55という値が入って、このマクロは終了します。
この処理は、エクセルのシートと、VBEを画面上に両方表示して、
ステップインで処理がどう進んでいるのか、見ていただくと良いかと思います。

ステップイン中に、VBE上の「Range("A1").Value」や、「i」にカーソルを合わせると、
その時点の値が表示されますので、よりどのような処理が実行されているのか、理解が深まります。

5.まとめ

繰り返し処理は、二つの方法があります。
  • 一つは、どのような状況で繰り返しを止めるかを決める
  • 予め回数を設定して処理を行う
応用すれば、Do~LoopでもFor~Nextでも対応は可能です。
状況によって使い分けができるようになっておくも良し、
どちらか一方に、拘って利用するも良しです。


それではまた

コメント