Last Update : 1999/10/10 20:15

SHIROのVB講座
『超』初心者編 第4日目

昨日までに、プロパティーと変数について、一体どんなものなのかがわかった。
それでは今日は条件分岐だ。コレさえ解ってしまえば、もう基本の殆どが終わったことになってしまうぞ?!

条件分岐なんていうと、実に堅苦しい。簡単に書けば『場合分け』の処理のことだ。(ん、コレでも堅苦しいか?!(笑))
プログラムは、これがなければ、高度な処理は不可能だ。

条件分岐の代表例としては、VBでは『IF〜THEN〜ELSE〜END IF』で表現されるステートメントがある。

基本的には、変数と論理記号で『式』を作って、この式が正しければ(真なら・Trueなら)、Then以下が実行され、そうでなければ(偽なら・Falseなら)Else以下が実行される・・・・。

↑何を言っているのか解らないと思う。(笑)
コレが解れば、今日の講義を飛ばして(ブッチして!(笑))、イキナリ明日の「Do Loopステートメント」と「数当てゲームに挑戦」に行っても大丈夫なくらいだ。

キョウビの高校生・大学生は、高校の数学の授業で、既にプログラムを習っているのだ。数学A・数学Bやセンター試験で出題されるプログラム言語は、VisualBasicと殆ど同じ『BASIC』だ。(!)

今日のこの時間は、この『BASIC』を学習するので、既に習った高校生・大学生で自信があれば、今日は飛ばしてもらって構わないぞ。逆に授業で解らなかったのであれば、この講座で解ってしまおう。基本的な考え方は非常に単純だぞ。

・・・というわけで、実際にコードを書いて、その動作を追ってみよう。
こういう論理的なものは、逆に感覚的に理解した方が、手っ取り早いからだ。

早速、新規にForm1を用意して、コレにテキストボックス2個(Text1・Text2)とコマンドボタン(Command1)を用意しよう。

↑ちなみに、筆者が作ったフォームはこんな感じ。ここで、ボタンをダブルクリックして、下のコードを入力しよう。

Private Sub Command1_Click()
If Text1 = "こんにちは" Then

    Text2 = "やあ!こんにちは!!"

End If

End Sub

ここで、Text2を代入しているところは、4文字だけ引っ込ませている(インデント)。これは、If〜End ifまでの構文が見やすいようにするためだ。別にインデントをしなければプログラムが動かないわけじゃないのだが、慣習的に必ず行うようにする。このようにすれば、他のプログラマが見たとき(遠い将来の自分がみたとき)に、一目瞭然で構文の関係が解るからだ。

では実行してみよう。そのままテキストボックスを変更せずに、ボタンを押しても、なんとまったく無反応だ。

そこで、一字一句間違わずに、上のテキストボックス(Text1)に「こんにちは」と入力しよう。
すると、下のテキストボックスには、「やあ!こんにちは!!」と表示される。

つまり、このプログラムは、Text1に『こんにちは』と入力されたときのみ返事を返すという、場合分けを行う処理だということが判る。

Text1が「こんにちは」ということを、式で『Text1="こんにちは"』と表現するのである。


もちろん、これは数字でも構わない。次のプログラムでは、1〜10までの整数を全て足してみよう。
「1+2+3+4+5+6+7+8+9+10」という計算を行うプログラムだ。

基本的な考え方は、次の路線で行ってみよう。

  1. まず変数「x」(エックス)と「y」(ワイ)を用意する。(どちらも共に数値型で定義する)
  2. x と y をそれぞれ初期化する。(0にしておく)
  3. x を 1 だけ増やす。
  4. y に x を足す。
  5. x が10でなければ3の処理に戻る。
  6. 結果をテキストボックスに反映する。(yをテキストボックスに代入する)

さて、これで1〜10までの整数の総和が求まる。
3〜5は繰り返し処理が行われるぞ。(10回ループが発生することがわかるだろう)

『3に戻る』という部分は、Goto文を使う。
3のところにラベルというものを用いてジャンプするのだ。

以下はGotoステートメントの簡単な使い方だ。このステートメントは、将来に渡って多用するわけではないので、ここでサラっと、紹介しておく。

LoopNanoda:
        
        
     ステートメント群
        
        
     Goto LoopNanoda

この『LoopNanoda』はプログラマが名づけた「ラベルの名前」で、そこへGoto文で処理を飛ばして(ジャンプさせて)いる。

構造化言語の概念がVBに導入され、あまり使われなくなった。Gotoステートメントは、初心者ならば使用していてもあまり恥ずかしくないが、もし中級者ならば、プログラムを組むときには、明日に講義する『Do 〜 Loop』ステートメントとの組み合わせで全て置き換えるようにしよう。

実は、Gotoステートメントは、小さいプログラムなら問題無いのだが、プログラムが大きくなってきたとき、Goto文を多用するとスパゲッティー状になってしまい、どこに飛んだのか、どこから飛んでくるのかをプログラムを後で見たときに解りにくくなる(これを、俗に『スパゲティープログラム状態』という)。この問題を回避しようと、Do Loopステートメントなどの構造化といわれる概念が言語に導入されるようになった。

さてこれを、プログラムにするのだが、下の解答例を見ないで、まずは1〜6の部分のコードが具体的にどのようになるのかを、自分で想像しながら考えて欲しい。自分でプログラムが組めるようになることが、この「『超』初心者講座」の目的だからだ。

Goto文以外は、今日までにやってきた範囲で全て出来てしまう。

「全然想像が出来ない!」という方のために、参考までにヒントを以下に書いておこう。

  1. Dim文を使って宣言する。数値型はLongかIntegerだ。(どちらでもオッケー)
  2. 単なる代入文だ。
  3. これも代入文だが、数学の時間で習ったものとは違って、『左辺=右辺』にはならないぞ!
    あくまでも「変数 ← 式」だ。
  4. 3と同様だぞ。「現状のy」と「x」を足して、新しいyにするのだ
  5. ここがIF文の登場だ。「もしxが10でなければ」という部分は、Notイコールを使おう。と言っても「≠」記号はBasicでは使えないので、「<>」を代用して表現することになっている。10じゃなければ、Gotoステートメントで、3のところにあるラベルに飛ぶ。
    賢い読者なら、「『10より小さければ』Gotoステートメントで飛ばすようにしても、オッケーなんじゃない?」と気づくと思う。
  6. yをText1にでも書く。

殆ど解答とその解説になっていると言う噂もあるが(笑)、頑張って考えて欲しい。


解答例は以下に書いておく。

え゛っ?見えないって?!
いや、本当に書いてあるんだってば!(笑)ヽ(^。^)ノ

Private Sub Command1_Click()
'変数の宣言
Dim x As Long, y As Long

    '初期化
    x = 0
    y = 0

xLoop:

    x = x + 1

    y = y + x

    If x <> 10 Then
        GoTo xLoop
    End If

    Text1 = y

End Sub

実は、この解答例、文字列を、表の背景と同色にしてある。うっしっし。( ̄ー ̄)。ムフ

・・・文字列を選択すれば見えるようになるぞ。(笑)


もし成功したら、1から1999までの整数の総和を求めるプログラムを作ってみよう(非常に簡単な改造で、コンピュータにしかできないような、ひたすら面倒な計算が出来るようになるので、なんだか嬉しくなれるぞ)。

欲をかいて、とんでもない巨大な数までの総和を設定してしまい、(VBが固まって)途中で終了できなくなってしまったら、慌てず騒がず、以下の操作をしてみよう!!

『Ctrlキー』を押しながら『Pause/Break』キーを押す!

すると、まさに一時停止状態になるので、VBエディタのストップボタン(終了)を押せば、復活するぞ。プログラムを間違えて、無限ループに入ってしまったときには、とっても有効な手段なので、覚えておこう。


今日のまとめ:

  1. 式を作って、判断させる。
  2. 今までの復習。