[Excel2013 で VBA] For 文による繰り返し

今回学ぶのは「繰り返し」構造である。
繰り返し構造を覚えると、「ある命令を複数回繰り返す」などの処理が簡単に書けるようになる。

For 文

繰り返しのあるプログラムを記述するための例題として、 「1 から n までの整数の和 S を計算する」プログラムを考えてみよう。

この問題は、実は数学の公式 S=n(n+1)/2 が分かっているので、実を言うとわざわざ繰り返しを使わなくても計算できる。
例えば、1 から 10 までの和は 10×11/2 = 55 である。

しかし、結果が分かっている方が初めての練習問題としては適切であるから、 当面はこの問題、特に「1 から 10 までの和の計算」を考えよう。

この問題は

S = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10


と記述すれば答えが計算されることは容易にわかる。

しかし、これが「1 から 100 までの和」、「1 から 1000 までの和」 などの場合はこの記述法ではとても対応しきれない。

この問題をもう少しプログラム的に考えてみよう。
プログラムは、基本的には1命令ずつ実行されるものであるから、
「似た命令の繰り返しで問題をとらえ直す」のが都合良い。

その一例が以下の方法である。

S = 0
S = S + 1
S = S + 2
S = S + 3
S = S + 4
S = S + 5
S = S + 6
S = S + 7
S = S + 8
S = S + 9
S = S + 10


始めに「S = 0」によって S の値を 0 に初期化する。
その後は、「S = S + x」という命令が x が 1 から 10 の範囲で実行されていることがわかる。
これにより S に 1 から 10 の和が格納されることをしっかりと理解してほしい。

もちろん、問題を以上の様にとらえ直しただけでは、「1 から 100 までの和」や 「1 から 1000 までの和」には対応できない。

しかし、上の表現のように「命令を複数回繰り返す」ような処理を簡単に記述できるような仕組みが
プログラミング言語には用意されている。その一つが以下のプログラムで用いている For 文である。

実際のソースコードを見てみよう。



このプログラムは、上の表現に完全に対応している。For 文と呼ばれるのは以下の部分である。

For x = 1 To 10 
    (命令)
Next x


ここで、変数 x はプログラム中に宣言済でなければならないことに注意しよう。
また、宣言済みであれば、変数は x でなく他の文字でも構わない。

この For 文の記述で何が起こるかを展開して書くと以下のようになる。

x = 1
  (命令)
x = 2 (Next x によってこの処理が行われる)
  (命令)
x = 3 (Next x によってこの処理が行われる)
  (命令)
…
x = 10 (Next x によってこの処理が行われる)
  (命令)
x = 11 (Next x によってこの処理が行われる)
  (→ x = 1 To 10 の範囲から外れたのでここで For 文終了)


このように、変数 x が指定の範囲 ( 1 To 10 ) にある範囲だけ、 x を 1 増加させながら命令が繰り返される。
「s = s + x」のように記述すれば、x が 1 から 10 まで変化するので、 期待の動作が得られる、というわけである。

では、いつも通り Excel の VBA を起動して以下を実行せよ。 (Visual Basic Editor の起動方法は「第一回:プログラムを書き始めるまでの準備」参照)

  • 上のプログラム例を記述し、実際に 1 から 10 までの和が 55 であることを確認せよ

  • 和を「1 から 10 まで」ではなく、「1 から 100 まで」などに変更してみよ。

    なお、「1 から 1000 までの和」を計算させると、値が大きくなりすぎるのでエラーが出る。
    (Integer は 2 バイトの整数であり -32768 〜 32767 までしか表現できないため)
    これを改善するには、 s を Long (4 バイトの整数) や Double (8 バイトの実数) に変更すれば良い。

  • For 文の条件は必ずしも 1 から始まる必要はない。
    和を「1 から 10 まで」ではなく、「-10 から 10 まで」や「10 から 20 まで」などに変更し、正しく計算が行われることを確かめよ。





←条件文の書き方For 文の続き/While 文による繰り返し→

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