[Excel で VBA] For 文の続き/While 文による繰り返し

前ページで繰り返しである For 文を学んだ。
ある変数 (例えば i) の範囲を指定し、i の値を 1 増やしながら命令を繰り返すのであった。

しかし、変数 i が 1 ずつ増えては都合の悪い場合もある。
例えば、「0 から 10 の間の偶数のみの和」の計算などである。

この場合、足すべき数は「0, 2, 4, …, 100」のように 2 ずつ増えるから、 変数 i が 1 ずつ増えてはやや都合が悪い。

そのような場合はどうすれば良いだろうか。
プログラミングにおいては良くあることだが、解法は1通りではなく複数の手法が考えられる。
そのうちの2つ、「For 文と If 文の組合せ」および「While 文による繰り返し」 をこのページでは取り扱う。

For 文と If 文の組合せ

「0 から 10 の間の偶数のみの和」の計算を For 文と If 文の組合せで実現したのが以下のプログラムである。
これはここまでの皆さんの知識で問題なく理解できるはずである。

Sub prog()
Dim i As Integer
Dim s As Long

	s = 0

	For i = 1 To 10
		If i Mod 2 = 0 Then
			s = s + i
		End If
	Next i

	MsgBox "sの値は" & s & "です"
End Sub

このプログラムで何が起こるかを丁寧に記述すると以下のようになる。

i = 1
  (If 文の条件に当てはまらない)
i = 2
  s = s + 2
i = 3
  (If 文の条件に当てはまらない)
i = 4
  s = s + 4
i = 5
  (If 文の条件に当てはまらない)
…
i = 9
  (If 文の条件に当てはまらない)
i = 10
  s = s + 10
i = 11
  (→ i = 1 To 10 の範囲から外れたのでここで For 文終了)


このように、実際には i は 1 ずつ増えるのだが、和を計算するのは i が偶数である 時のみである。

このように、For 文の中で If 文によって命令を実行したりしなかったりすることはしばしば行われる。


For 文の Step 指定

これまでのFor 文では、繰り返しの変数 i の増分が 1 であったが、 Step を指定することでその増分を変化することができる。

それにより偶数の和を求めることができる。 以下の例を見てみよう。

Sub prog()
Dim i As Integer
Dim s As Long

	s = 0

	For i = 0 To 10 Step 2
		s = s + i
	Next i

	MsgBox "sの値は" & s & "です"
End Sub

これにより、For 文の変数 i は「0、2、4、6、8、10」の値を取って プログラムが終了することになる。

なお、For 文の変数の開始状態を 0 としていることにも注意しよう (2 でも良い)。
もし開始状態を 1 としてしまうと、 i は「1、3、5、7、9」となり、奇数の和になってしまう。


While 文による繰り返し

i を 2 ずつ増やして繰り返しを実現する別の方法に、While 文による方法がある。

まず、プログラムを見てみよう。

Sub prog()
Dim i As Integer
Dim s As Long

	s = 0
	i = 0

	While i <= 10
		s = s + i
		i = i + 2
	Wend

	MsgBox "sの値は" & s & "です"
End Sub

今まで学んだ For 文に似ているが、While 文は以下の構造を持っている

While (条件)
   (命令)
Wend


For 文の場合は、変数 i の範囲をここからここまで (i = 1 To 10) と指定したが、
While 文の場合は範囲を指定するのではなく、条件が満たされる場合は常に繰り返すことに注意しよう。

上の例の場合、「条件」は「i <= 10」、すなわち「i が 10 以下であるとき」である。
なお、「条件」の記述法にについては第三回: 条件文の書き方を参照。

さらに、いくつか注意すべき点がある。

i = i + 2 を記述しないと、プログラムが無限ループに入って 終了しなくなってしまう。
そういう場合はキーボードにて

Ctrl + Pause (2 つのキーの同時押し)


にて無限ループを抜け出せる。

最後に、上記 While 文がどのように動作するか丁寧に書いておこう。

i = 0
(ここから While 文に入る)
i = 0 は i<=10 を満たす
  s = s + 0
  i = i + 2 (i=2)
i = 2 は i<=10 を満たす
  s = s + 2
  i = i + 2 (i=4)
i = 4 は i<=10 を満たす
  s = s + 4
  i = i + 2 (i=6)
…
i = 10 は i<=10 を満たす
  s = s + 10
  i = i + 2 (i=12)
i = 12 は i<=10 を満たさない
(While 文終了)






←For 文による繰り返し繰り返し (続き)→

Excel で学ぶ Visual Basic for Applications (VBA)に戻る