VB.net/VB2017/VB2019
たし算以外もできる計算プログラムを作る
前回はたし算のみの計算ができるプログラムをつくりました。今回はひき算やかけ算、わり算などを計算を選べるプログラムを作っていきましょう。
前回の画面デザインを修正する
今回は新規作成ではなく、前回のプログラムを修正していくかたちで作り上げていきます。
前回に作りました「たし算プログラム」のプロジェクトを開いてください。

フォーム画面上の「+」ラベルを削除して、次の画面になるようにコントロールを2つ追加してください。

追加したコントロールのプロパティを設定します。
| 番号 | 種類 | プロパティ | 値 |
|---|---|---|---|
| 1 | ComboBox | Name | cmbCalc |
| Width | 45 | ||
| Height | 20 | ||
| DropDownStyle | DropDownList | ||
| 2 | Button | Name | btnEnd |
| Width | 100 | ||
| Height | 30 | ||
| Text | "終 了" |
最後にコントロールの配置の調整をしてください。
コードを記述する
「実行ボタン」のコードを修正
デザインのフォーム画面で「実行」ボタン(btnExec)をダブルクリックして、コードエディターを開きます。
前回に記述してあるbtnExec_Clickメソッドの中身を書き換えますので削除します。

削除できましたら、以下の新しいコードを入力してください
記述するコード
'計算に使う変数の宣言
Dim intCalc As Integer
'ここから入力チェックの処理 -----
'txtA、txtBに入力があるかチェック
If txtA.Text = "" Or txtB.Text = "" Then
'どちらかが入力無い場合、メッセージ&終了
'メッセージ表示
MsgBox("入力してください")
'処理終了
Exit Sub
End If
'txtA、txtBが数値に変換できる値かどうかチェック
If IsNumeric(txtA.Text) And IsNumeric(txtB.Text) Then
'両方とも数値変換できる場合、何もしない
Else
'そうでない場合、メッセージ&終了
'メッセージ表示
MsgBox("数値を入力してください")
'処理終了
Exit Sub
End If
'コンボボックスが選択肢を選んでるかのチェック
If cmbCalc.SelectedIndex = -1 Then
'メッセージ表示
MsgBox("コンボボックスを選択してください")
'処理終了
Exit Sub
End If
'ここから計算の処理 -----
'コンボボックスの選択内容により分岐する
Select Case cmbCalc.SelectedIndex
Case 0
'たし算
intCalc = CInt(txtA.Text) + CInt(txtB.Text)
Case 1
'ひき算
intCalc = CInt(txtA.Text) - CInt(txtB.Text)
Case 2
'かけ算
intCalc = CInt(txtA.Text) * CInt(txtB.Text)
Case 3
'わり算
intCalc = CInt(txtA.Text) / CInt(txtB.Text)
End Select
'計算結果をラベルに表示
lblAns.Text = CStr(intCalc)
フォームロード時にコード記述する
フォーム画面のコントロールを配置していない、空いているスペースをダブルクリックします。

新しくフォーム画面がロードされる時に動作するフォームロード イベントにForm_Loadメソッドが自動で追加されます。

その中に以下のコードを追加してください。
記述するコード
'コンボボックスにアイテムを追加
cmbCalc.Items.Add("+")
cmbCalc.Items.Add("−")
cmbCalc.Items.Add("×")
cmbCalc.Items.Add("÷")
終了ボタンにコードを追加する
デザイン画面で「終了」ボタンをダブルクリックします。

「終了」ボタンのクリックイベントにbtnEnd_Clickメソッドが自動で追加されますので、コードを記述してください。

記述するコード
'プログラムを終了 End
実行して動作確認を行う
すべてがコピーできたら、動作確認をしてミスなどが無いかをチェックしてください。
コーディングの解説
今回のコードを解説していきます。
If文の条件で複数条件を判定する
If txtA.Text = "" Or txtB.Text = "" Then
以前までなら一つの条件で、そのIf文の分岐を判定していました。
今回の条件では Or演算子 を追加しています。
Or演算子は前後の条件のどちらかがTrueの場合に、全体の評価としてTrueになるという演算子です。
ですので、ここでは
「テキストAが未入力 または テキストBが未入力」という意味の質問をしています。
数値に変換できるかの判定
IsNumeric(txtA.Text)
IsNumericというメソッドを使用して、後ろの () カッコの中身が数値に変換できるかどうかを調べています。
txtA.Text に数値変換できないような値 “ABC” が入っていた場合、 IsNumeric(txtA.Text) としてはFalseを意味するようになります。
また逆に、数値に変換できるような “123” が入っていた場合は、Trueを意味するようになります。
コンボボックスで選択中のインデックスがわかるプロパティ
'コンボボックスが選択肢を選んでるかのチェック If cmbCalc.SelectedIndex = -1 Then
SelectedIndexプロパティは、コンボボックスで選択中のアイテムのインデックスが格納されています。
コンボボックスが未選択の状態の場合は、SelectedIndex には -1 が格納されています。
その項目が必須入力の時は、このように判定して未入力を防ぎます。
分かりやすく複数分岐するSelect Case
'コンボボックスの選択内容により分岐する Select Case cmbCalc.SelectedIndex
Select Caseについてはこちらで詳しく説明しています。

フォームロードイベントに記述する意味
フォームロードイベントのメソッドには以下のコードがあります。
'コンボボックスにアイテムを追加
cmbCalc.Items.Add("+")
これはコンボボックスに選択肢となるアイテムを追加する命令です。
また、フォームロードイベントはプログラムを実行した時に、最初の方に駆動するイベントなので、コンボボックスにアイテムを追加する処理をこのイベントで行なっています。
プログラムを終了させる命令
End
終了ボタンを押すと、プログラムを終了されたいので、終了させる命令を読んでいます。
さいごに
色々な計算をさせるためにコンボボックスというコントロールを使いました。皆さんもよく使うコントロールの一つなので、よく見かけるのではないでしょうか。
次回がいよいよ最終の「年齢計算プログラム」です。今までの事を使えば出来るようになっていますので、楽しんで制作してください。

