2009-12-10

While文とUntil文

今日の内容

  • 前回の課題プログラム提出
  • 条件が成立するまで繰り返す

課題提出

前回の最後に作った、20人の身長の合計と平均を求めるプログラムを提出してください。
件名:学籍番号と「For文」、本文:プログラムと名前

InputBox

先週、1から10までの和、1から100までの数を足すプログラムを作りました。
今度は、プログラムを実行するときに、幾つまでの和を求めるか尋ねるプログラムを書いてみましょう。
プログラムを実行するときに尋ねるためにはInputBoxを使います。

n = InputBox("幾つまでの和を計算しますか")

と書くと、プログラムを実行するときに入力が求められて、入力した数字がnに代入されます。
そして、先週のプログラムを1からnまでの数を足すように変更して

wa = 0
For j = 1 To n
wa = wa + j
Next j
Cells(1, 1) = "合計"
Cells(1, 2) = wa

とします。

While文とUntil文

但し、InputBoxに負の数字を入れたり、文字を入れるとプログラムが動きません。
だから、ちゃんと正の数字を入れるまで繰り返すようにします。

Do
n = InputBox("幾つまでの和を計算しますか")
Loop Until IsNumeric(n) And n > 0

DoとLoopの間を、Untilの後の条件が成り立つまで繰り返します。IsNumericは数字なのかを判別します。

データの個数を数える

前回までに勉強したFor文は、あらかじめ何回繰り返すか決まっています。
例えば For i = 1 To 10 と書けば10回繰り返します。
言い換えると、プログラムを各時点で、データが幾つ有るか分かっていなければなりません。

でも実際には、先にプログラムを書いておいて、後から様々な個数のデータを貼り付けて計算することも多いです。
そんな時には、データが有る限り繰り返すプログラムが必要です。
つまり、
Cells(1,1)にデータが存在するか調べる。
なかったら終わり。
あったら一つ下のCells(2,1)にデータが存在するか調べる。
なかったら終わり。
あったら一つ下のCells(3,1)にデータが存在するか調べる。

ということを、データが終わるまで繰り返します。
これをプログラムに書くと

j = 1
Do Until Cells(j, 1) = ""
  j = j + 1
Loop
Cells(1, 2) = "データの個数"
Cells(1, 3) = j

となります。
Untilの後に条件を書くと、条件が成立するまで繰り返します。""は二つの"の間に何もない、つまりデータが存在しないことを意味します。

練習

Excelのシートに幾つか数字を書いて、このプログラムを実行して、ちゃんと個数を数えられているか確かめてください。もし間違っていたら、理由を考えてください。

その他の繰返し文

Do While 条件
 文
Loop

このように書くと、条件が成り立つ間繰り返します。先程のプログラムは

j = 1
Do While Cells(j, 1) <> ""
  j = j + 1
Loop
Cells(1, 2) = "データの個数"
Cells(1, 3) = j

となります。<>は「大きい、または小さい」つまり「等しくない」という意味です。

一度プログラムを実行しないと条件を判定出来ない場合もあります。

あるプログラム
Do While 条件
 同じプログラム
Loop

これだと同じプログラムを2回書かなければなりません。このような場合は条件を繰り返しの後に書いて

Do
 あるプログラム
Loop While 条件

と書くことも出来ます。Untilも同様に

Do
 あるプログラム
Loop Until 条件

と書くことが出来ます。

配列の使い方

配列を使うために前回は
Dim x(60)
と書きました。このDim文はプログラムの先頭に書かなければならず、60の部分を変数にすることは出来ません。つまり

n = 60
Dim x(n)

のような書き方は出来ません。
このように途中で配列の個数を変える場合は、最初に

Dim x()

のように個数を指定せずに書いて、次に何個必要か数えてから

ReDim x(数えた個数)

と書くと、その後は配列を使えるようになります。
従って、流れとしては

Sub 合計()
Dim x()
個数を数えてnに代入するプログラム
ReDim x(n)
先週の合計を計算して表示するプログラムで、個数がnのもの
End Sub

のようになります。

課題

個数を数えて合計を計算して表示するプログラムを書いてください。

できた人は、平均、分散を計算するプログラムにも挑戦してください。

0 件のコメント: