繰り返し(ループ)処理
次に、繰り返し処理について説明します。
繰り返し処理は、ループ処理と呼ばれます。
こちらのほうがよく使われる表現なので、この講座内ではループ処理と呼ぶことにします。
ループ処理というのは

ということです。
「ある条件を満たすまで、何回も処理を繰り返すこと」
これをループと呼びます。
Excelの関数ではループ処理はできません。
VBAを使えばループ処理ができることも、
VBAを使う理由の一つです。
ループ処理の基本のかたち
For カウンター変数 = はじまりの数値 to 終わりの数値
繰り返したい処理①
繰り返したい処理②
繰り返したい処理③
Next カウンター変数
という書き方をします。
10回繰り返す場合を日本語で書いてみると
For:1からはじめて10になるまで(1,2,3・・・10)
処理①を実行する
処理②を実行する
処理③を実行する
Next:ここまで、処理を繰り返す
はじまりの数値を1増やして、
終わりの数値とイコールになるまで、
Forに戻って繰り返す
を自動的に実行します。
このループ処理は次のことを意識して組み立てます。
*どこからどこまで(For~Next)
*何回繰り返す(カウンター変数)
*何を処理する

カウンター変数とは
VBAの「変数」については、実はまだ、この講座では学んでいません。
この講座では、ループ処理のカウンター変数の動きを知ることが「変数」の概念をつかむのに良いのではと考えています。
普通は、まずは変数を教えてから、ループ処理を学ぶという順番なのですが、より理解度を高めるために、あえてこの順番で教えています。
ループ処理の中で、カウンター変数という言葉が出てきました。
カウンター変数は、その名の通り、「回数をカウントするもの」のことです。
プログラミングの世界では、変数と呼ばれるものには変数名(名前)が付いています。
ループ処理でカウンター変数の変数名としては「i」という文字がよく使われます。
もちろん「i」を使わなければならないということではなく、他の文字でも動作します。
カウンタ変数に「i~n (i,j,k,l,m,n)」の文字を使うのは昔からの慣習なのですが、理由は特に知らなくてもOKです。
FORTRANというプログラミング言語の仕様として、i~nが整数として使われていて・・・うんぬん。
という難しい話を聞くはめになるので。
ここではカウンター変数として「i」を使って説明します。
For i = 1 to 5
処理①
Next i
と書いた時には、どういう動作をするかというと、
「処理①が5回繰り返し実行」
という動きをします。
例えば処理①に
Cells(1,1).Value = 100
と書くと、A1セルに5回100が書き込まれます。

A1セルが100になるだけで、見た目は特に変化ありません。
この時、カウンター変数の「i」はどういう変化をするかというと、
1回目 i=1
2回目 i=2
3回目 i=3
4回目 i=4
5回目 i=5
と増えていきます。
5回目にiが5になるので、処理①が実行されたら、Next i で For に戻らないで、このループを抜けます。
例えば
Cells(1,1).Value = 0
For i = 1 to 5
Cells(1,1).Value = 100
Next i
Cells(1,1).Value = 200
と書かれていたとすると、
「A1セルに0を入力」(順次処理)
「A1セルに100を5回入力」(ループ[繰り返し]処理)
「A1セルに200を入力」(順次処理)
となって、最終的にA1セルは200になります。
これは、ただ単に、上から下まで実行して、A1セルが変化しただけです。
先ほど、カウンター変数 i の値 がループする毎に増えていくという話をしました。
iの値がループする度に増えていく(減っていく)ので、カウンター変数と呼ばれているのです。
iの値が、増えたり、減ったりと変化していくのであれば、これをうまく使えないでしょうか?
例えば
For i = 1 to 5
Cells( i , 1 ).Value = 100
Next i
と書いたら、どのように動くと思いますか?
1回目 Cells( 1 , 1 ).Value = 100
2回目 Cells( 2 , 1 ).Value = 100
3回目 Cells( 3 , 1 ).Value = 100
4回目 Cells( 4 , 1 ).Value = 100
5回目 Cells( 5 , 1 ).Value = 100
となって、Cells( i , 1 ).Value の「 i 」 と書いた箇所が変化していきます。
もちろん 「 i 」 は、列に書いてもOKです。
For i = 1 to 5
Cells( 1 , i ).Value = 100
Next i
1回目 Cells( 1 , 1 ).Value = 100
2回目 Cells( 1 , 2 ).Value = 100
3回目 Cells( 1 , 3 ).Value = 100
4回目 Cells( 1 , 4 ).Value = 100
5回目 Cells( 1 , 5 ).Value = 100
ちなみに、「 i 」を行と列、両方に書いてもOKです。
For i = 1 to 5
Cells( i , i ).Value = 100
Next i
1回目 Cells( 1 , 1 ).Value = 100
2回目 Cells( 2 , 2 ).Value = 100
3回目 Cells( 3 , 3 ).Value = 100
4回目 Cells( 4 , 4 ).Value = 100
5回目 Cells( 5 , 5 ).Value = 100
となります。
わかりますか?
値が変化するカウンター変数「 i 」をうまく使って、連続してセルに値を入力できるのです。
他にも
For i = 1 to 5
Cells( i , 1 ).Value = i
Next i
といった書き方をすると
1回目 Cells( 1 , 1 ).Value = 1
2回目 Cells( 2 , 1 ).Value = 2
3回目 Cells( 3 , 1 ).Value = 3
4回目 Cells( 4 , 1 ).Value = 4
5回目 Cells( 5 , 1 ).Value = 5
となり、i をセルの値として入力もできるのです。
おわかりいただけたでしょうか?
なかなか最初はイメージしにくいかもしれません。
ループ処理を理解するには、カウンター変数がどのように動作し、どのように使えるのかを理解する必要があるのです。
カウンター変数を理解することは、次に学ぶ、変数の理解にもつながってくるのです。
カウンター変数をnとします。
Cells( 1 , “N”)
Cells( 1 , n )
の違いを知っておきましょう。
Cells( 1 , “N”)という書き方は、N1セルを表しますね。
Range(“N1″)と同じです。
cells(1,n) と書いた時、nは変数で、nの値によって列が変わります。
cells(1,”N”) はN列は「N」固定のままで変わりません。
“”で囲っているかどうかの違いです。
“”で囲っていると、文字そのものを表します。
変数名を書くと、その変数の値に置き換わります(変数の展開とよびます)。
少しむずかしいですが、この違いを理解しておきましょう。
★ここが重要
Forで使うカウンタ変数は、自動的に増えたり減ったりする
変化するカウンター変数はセルの指定にも使える
カウンター変数の増減間隔の決め方
ここまでカウンター変数は1づつ増えるという説明をしてきました。
カウンター変数は、何も指定をしなければ1づつ増えます。
ここで増減する値をきちんと指定してみましょう。
For i = 1 to 5 Step 1
Cells( i , 1 ).Value = i
Next i
とForの最後に 「Step 1」 を付けます。
Stepの後の数字は、増減数です。
For i = 1 to 5 Step 1(i = 1,2,3,4,5 と1づつ増える)
For i = 1 to 9 Step 2(i = 1,3,5,7,9 と2づつ増える)
もちろんマイナスも指定できます。
その時は、はじまりの数字が終わりの数字よりも大きくないと、ループが終了できなくなります。
これを、終わりなきループということで、「無限ループ」と呼ばれ、プログラムを強制的に停止しなければならなくなります。
なのでカウンター変数を減らしていく場合には、
For i = 5 to 1 Step -1(i = 5,4,3,2,1 と1づつ減る)

のように書きます。
i は 5から1つづ減っていって、1になったらループを終了して抜けます。
ループの階層化(ネスト)
ループは階層化することもできます。
階層化というのは、ループの中にループを入れるということです。
For i = 1 to 3 Step 1
For j = 1 to 3 Step 1
Cells( i , j ).Value = i + j
Next j
Next i
と書けるということです。
これはどういう動きをするかというと。

ちょっと難しいですが、このように動きます。
実際に実行されるのは、
Cells( 1 , 1 ).Value = 1 + 1(=2)
Cells( 1 , 2 ).Value = 1 + 2(=3)
Cells( 1 , 3 ).Value = 1 + 3(=4)
Cells( 2 , 1 ).Value = 2 + 1(=3)
Cells( 2 , 2 ).Value = 2 + 2(=4)
Cells( 2 , 3 ).Value = 2 + 3(=5)
Cells( 3 , 1 ).Value = 3 + 1(=4)
Cells( 3 , 2 ).Value = 3 + 2(=5)
Cells( 3 , 3 ).Value = 3 + 3(=6)
と9回の処理が実行されます。

この動きを頭の中でイメージできるようになることが大切です。
Excelの表は格子状になっているため、処理する時には、この形をよく使います。
繰り返すたびに、i と j が変化して行き、それぞれが行と列の値になることを利用します。
VBAのループ処理では、このカウンター変数をうまく利用して処理を行っていくことになります。
カウンター変数を使いこなせるかどうかがポイントなのです。
繰り返し処理には、For〜Next の他に、Do〜Whileという形や、For Each 〜 という形もあります。
まずはFor〜Nextを使えるようになってから覚えて使ってみましょう。
繰り返し・ループの形
A1からA3に100を入れる
For i = 1 to 3
Cells( i , 1 ).Value = 100
Next i
A1からA10まで1から1づつ増やして数字を入れる(1,2,…10)
For i = 1 to 10
Cells( i , 1 ).Value = i
Next i
A1からA10まで2から2づつ増やして数字を入れる(2,4,…20)
For i = 1 to 10
Cells( i , 1 ).Value = i * 2
Next i
A10からA1まで10から1づつ減らして数字を入れる(10,9,…1)
For i = 10 to 1 Step -1
Cells( i , 1 ).Value = i
Next i
A1からC3の範囲に200を入れる
For i = 1 to 3
For j = 1 to 3
Cells( i , j ).Value = 200
Next j
Next i
A3からA6に100を入れる
For i = 3 to 6
Cells( i , 1 ).Value = 100
Next i
カウンター変数は、1から始めなくてもいいので、こういう書き方もできます。
以上、繰り返し・ループの説明でした。


