4-1 分岐処理 (1) ―基本的な If 文―

以前、【基礎課題1-9】で、下のようなフォームのプログラムを作りました。

このプログラムでは、

  1. チェックされた項目の数を数える。
  2. その数に応じて、診断結果を出す。

という2つの部分が必要です。

今回、このプログラムに、2. の機能をつけ加えてみましょう。

1. については、今回は考えません。項目の数は自分で数えることにします。

【基礎課題 4-1】

このプログラムを新しい名前で保存してから、下のようなフォームのプログラムに作り替えて下さい。

主なコンポーネントのオブジェクト名は、次のようにして下さい。

コンポーネント オブジェクト名
コマンドボタン「診断」 CommandShindan
テキストボックス「項目数」 TextKomokusu
チェックボックス「6-10」 CheckHigh
チェックボックス「0-5」 CheckLow
下のテキストボックス TextMessage

「チェック項目数」を入力してから「診断」ボタンを押したとき、

ようなプログラムを作りましょう。

ある条件が成り立っているか成り立っていないかによって行う内容が変わる場合には、「If文」を用いて表します。

「診断」ボタンをクリックしたときのイベントハンドラを、次のように書いて下さい。

Private Sub CommandShindan_Click()
  If TextKomokusu.Text >= 6 Then
    CheckHigh.Value = 1
    TextMessage.Text = "少しストレスがたまっています。気分転換を。"
  Else
    CheckLow.Value = 1
    TextMessage.Text = "ストレスの兆候がありますが、心配は不要。"
  End If
End Sub

注意 面倒でも、半角スペース2字分ずつの「字下げ」を必ず行って下さい。構造が見やすくなります。

この命令は、下のような構造になっています。

「診断」ボタンを押したときの処理

Private Sub CommandShindan_Click()
 If 条件:「チェック項目数」が6以上 Then
 条件が成り立っているときの処理1;
 条件が成り立っているときの処理2;
 条件が成り立っているときの処理3;
 ・
 ・
 ・
 Else
 条件が成り立っていないときの処理1; 
 条件が成り立っていないときの処理2; 
 条件が成り立っていないときの処理3; 
 ・
 ・
 ・
 End If (← If文の終わりを表す)
End Sub

If 文は、条件が成り立っているか成り立っていないかによって、プログラムの流れを分岐させます。

条件は、

のどちらかしかありません。したがって、プログラムは、

のどちらかひとつを必ず実行し、かつ、いずれかひとつしか実行しません。

※ VisualBasic での不等号記号の書き方は下表の通りです。

数学表記 意味 VisualBasic での表記
A>B AはBより大きい A > B
A≧B AはB以上 A >= B
A=B AはBに等しい A = B
A≦B AはB以下 A <= B
A<B AはBより小さい A < B
A≠B AはBに等しくない A <> B

【基礎課題 4-2】

「年齢と選挙権」プログラム次のようなフォームを持つプログラムを作って下さい。

主なコンポーネントのオブジェクト名は、次のようにして下さい。

コンポーネント オブジェクト名
上のテキストボックス TextNenrei
「入力完了」コマンドボタン CommandKanryo
中のテキストボックス Text1
下のテキストボックス Text2
年齢を入力してから「入力完了」ボタンを押すと、 2つのメッセージが表示される。

年齢とメッセージの対応は、次の表にしたがってください。

年齢 メッセージ
20歳以上 あなたは成年ですね。あなたには選挙権があります。
19歳以下 あなたは未成年ですね。あなたには選挙権がありません。

下の下線部を埋めて、プログラムを完成させて下さい。

Private Sub CommandKanryo_Click()
  If TextNenrei.Text ________ Then
    ________________________________________________
    ________________________________________________
  Else
    ________________________________________________
    ________________________________________________
  End If
End Sub

【練習問題】

新しいコンポーネント「オプションボタン」の使い方を覚えましょう。

コンポーネントパレットからオプションボタンのアイコンを選んで、フォーム上に3つ貼って下さい。

このままの状態でプログラムを実行して、オプションボタンをクリックして下さい。

オプションボタンはどういうはたらきをするコンポーネントか、下に書いて下さい。

【練習問題】

プロパティウィンドウから3つあるオプションボタンのうちのいずれかを選んで、その Value プロパティの値を TrueFalse に変えてみましょう。何が起こりますか?

【基礎課題 4-3】

次のようなフォームを持つプログラムを作って下さい。

上の「ようこそいらっしゃいました。」と「性別をチェックして下さい。」は、 2つのラベルを用いて表現しています。

プログラムの動作内容は以下の通りです。

実行してから性別をチェックしてボタンを押すと、 下のように2つのメッセージが表示される。

チェック項目とメッセージの対応は、次の表にしたがって下さい。

チェック項目 メッセージ
女性 あなたは女性ですね。右側の階段をお上り下さい。
男性 あなたは男性ですね。左側の階段をお上り下さい。

【基礎課題 4-4】

次のようなフォームを持つプログラムを作って下さい。

主なコンポーネントのオブジェクト名は、次のようにして下さい。

コンポーネント オブジェクト名
オプションボタン「女性」 OptionF
オプションボタン「男性」 OptionM
コマンドボタン「OK」 CommandOK
チェックボックス「20歳以上」 CheckSeinen

注意 「秘密倶楽部」は架空の団体ですが、もしかすると実在するかもしれません。

プログラムの動作内容は次の通りです。

性別と年齢をチェックしてから「OK」ボタンを押すと、 2つのメッセージが表示される。

性別・年齢の条件とメッセージの対応は、次の表にしたがってください。

性別・年齢 メッセージ
女性で、かつ、20歳以上 あなたは入会資格があります。どうぞお入り下さい。
それ以外 あなたは入会資格がありません。残念ですがお帰り下さい。

注意 「女性で、かつ、20歳以上」つまり、「OptionF がチェックされていて、かつ、CheckSeinen がチェックされている」ことを、

(OptionF.Value = True) And (CheckSeinen.Value = 1)

のように And を用いて表します。

And の前後の条件式には、 ( ) をつけておく方が見やすくなり、後に余計な間違いも起こしにくくなります。

下の枠内を埋めて、プログラムを完成させて下さい。

注意 「かつ」ではなく「または」を表したいときは、 or を使います。

例 「女性、または、20歳以上」のとき

(OptionF.Value = True) Or (CheckSeinen.Value = 1)

【基礎課題 4-5】

次のようなフォームを持つプログラムを作って下さい。

主なコンポーネントのオブジェクト名は、次のようにして下さい。

コンポーネント オブジェクト名
テキストボックス TextNumber

ここで、プログラムを実行し、数を入力してからOKボタンを押したとき、

ようなプログラムを作って下さい。

注意 スピンテキストボックスに入力された値が4以上7以下であることを表すのに、

4 <= TextNumber.Value <= 7 

と書きたくなると思います。しかし、VisualBasicは、2つの不等号が同時に出てくる文を理解することができません。ですから、

(4 <= TextNumber.Text) And (TextNumber.Text <= 7)

のように、条件を()でふたつの部分に分けてから And でつなげて書く必要があります。