パソコン活用研究5番街(Visual Basic、Excel(VBA)、BASIC プログラミング研究)

While .... Wend


While ... Wend 使ってますか。おじさんはC言語ではよく使いますが、Basicではあまり使わないですね。
For ... Next や If文とGotoの組み合わせで処理してしまうことが多いです。みなさんもそうかもしれません。
あえてWhile ... Wend 使わなくてもなんとかなることが多いですから。でも、While ... Wend を使った方が便利
な場合も存在します。
今回は、While ... Wend の使い方を研究してみたいと思います。

1 While ... Wend 書式

While 式
...
Wend
という書式で使います。式の値が真(通常は0でない)の場合、While ... Wend ループが繰り返されます。

例えば以下のように使います。Helloを10回表示するプログラムです。

10 A=0
20 While A<10
30 Print "Hello"
40 A=A+1
50 Wend

でもこれは、
10 For A=0 to 9
20 Print "Hello"
30 Next
ともっと簡単に書けてしまうし、
10 A=0
20 Print "Hello"
30 If A<10 Then A=A+1: Goto 20
とも書けてしまうので、While ... Wend のありがたみはまったくありません。

2 While ... Wend のありがたみ

データ数の決まっていないデータの読み込みをする場合も非常に多いと思います。このような場合、
For ... Next を使っても記述できますが、While ... Wend の方がスマートな記述ができます。
While ... Wend の場合は、データの終わりを示すマーク(よく-9999とか、/,*などを終わりのマークとする)
が入力されるまで、入力し続けるようにコードを記述します。

例えば、非常によくある例ですが、生徒名とテストの点数を入力するプログラムは、以下のようになります。
生徒名に何も入力しない場合に、終了とすることにします。

10 i=1
20 input"生徒名",name$(i)
30 while name$(i)<>""
40 input"点数",ten(i)
50 i=i+1
60 input"生徒名",name$(i)
70 wend
100 for k=1 to i-1:print name$(k);ten(k):next

と、これでほぼWhile ... Wendは終わりですが、上記のプログラムをより実用的にするには、誤入力した場合に
訂正する機能が必要です。誤入力の訂正には、最低1つ前のデータに戻って、入力しなおすことができれば
十分です。ここでは、生徒名に*を入力するとひとつ前に戻って訂正できる機能をつけてみます。

10 i=1
20 input"生徒名",name$(i)
30 while name$(i)<>""
40 input"点数",ten(i)
50 i=i+1
60 input"生徒名",name$(i)
70 if name$(i)="*" then i=i-1:goto 60
80 wend
100 for k=1 to i-1:print name$(k);ten(k):next

実行例です。まあ、訂正機能はプリミティブなものですが、一応機能しています。

ま、気がむいたらWhile ... Wend 使ってみて下さい。

TOP PAGE >Basic活用研究目次