VB.net/VB2017/VB2019
年齢計算するプログラムを作る
今回は最終回として年齢計算のプログラムを作ってみましょう。
画面デザインする
前回までと同様に以下の画面のデザインを元に、コントロールの貼り付け・プロパティの設定・位置調整を行なって画面全体のデザインをはじめに作ります。
コントロールのプロパティは以下の通りに設定します。
番号 | 種類 | プロパティ | 値 |
---|---|---|---|
1 | TextBox | Name | txtYear |
Width | 100 | ||
Height | 19 | ||
Text | ""(カラ文字) | ||
MaxLength | 4 | ||
2 | TextBox | Name | txtMonth |
Width | 50 | ||
Height | 19 | ||
Text | ""(カラ文字) | ||
MaxLength | 2 | ||
3 | TextBox | Name | txtBirthYear |
Width | 100 | ||
Height | 19 | ||
Text | ""(カラ文字) | ||
MaxLength | 4 | ||
4 | TextBox | Name | txtBirthMonth |
Width | 50 | ||
Height | 19 | ||
Text | ""(カラ文字) | ||
MaxLength | 2 | ||
5 | Label | Name | lblAge |
BorderStyle | Fixed3D | ||
AutoSize | False | ||
Width | 100 | ||
Height | 19 | ||
Text | ""(カラ文字) | ||
6 | Button | Name | btnCalc |
Width | 106 | ||
Height | 46 | ||
Text | "計 算" | ||
フォーム画面 | Form | Name | frmMain |
Width | 387 | ||
Height | 251 | ||
Text | "年齢計算プログラム" |
動作をイメージしてみる
プログラムがどのように動作するかを確認してみましょう。
フォーム画面のロードイベント
- フォーム画面を表示する時に、現在の年・月の項目にシステム日付(現在日付)を表示する。
計算ボタンのクリックイベント
- 計算ボタンをクリックすると、年齢計算を行って lblAge に表示する。
- 現在の年 - 生年月日の年を年齢とする。
- ただし、生まれ月が現在月より大きい場合は、誕生日がまだ来ていない事として、計算した年齢よりも−1した歳を表示する。
コードを記述する
どんな動作をするかをイメージ出来たら、コードの記述を行なっていきましょう。
フォーム画面のロード時のコードを記述
フォーム画面のコントロールを貼っていない、空いている場所をダブルクリックしてコードを記述します。
記述するコード
'フォームロードイベントのメソッド '現在の日付を取得 Dim dt As DateTime = DateTime.Now '年・月をそれぞれ表示 txtYear.Text = CStr(dt.Year) txtMonth.Text = CStr(dt.Month)
「計算ボタン」のコードを記述
デザインのフォーム画面で「計算」ボタン(btnCalc)をダブルクリックしてコードを記述します。
記述するコード
'計算ボタンクリックイベントのメソッド '必須チェック If txtYear.Text = "" Or txtMonth.Text = "" _ Or txtBirthYear.Text = "" Or txtBirthMonth.Text = "" Then 'メッセージ MessageBox.Show("入力してください") '処理終了 Exit Sub End If '日付として合ってるかチェック Dim sNowDate As String Dim sBirthDate As String 'それぞれで日付の形に成形する(仮に1日とする) sNowDate = txtYear.Text & "/" & txtMonth.Text & "/1" sBirthDate = txtBirthYear.Text & "/" & txtBirthMonth.Text & "/1" If IsDate(sNowDate) And IsDate(sBirthDate) Then '両方とも日付として正しい場合は '何もしない Else 'それ以外は、メッセージ表示して終了 'メッセージ MessageBox.Show("正しい値を入力してください") '処理終了 Exit Sub End If '計算処理 ----- Dim iAge As Integer iAge = CInt(txtYear.Text) - CInt(txtBirthYear.Text) '誕生月が現在月より大きい場合、年齢を1引く If CInt(txtBirthMonth.Text) > CInt(txtMonth.Text) Then iAge = iAge - 1 End If 'ラベルに表示 lblAge.Text = CStr(iAge)
実行して動作確認を行う
すべてがコピーできたら、動作確認をしてミスなどが無いかをチェックしてください。
コーディングの解説
コードを解説していきます。
システム日付を取得して表示
'現在の日付を取得 Dim dt As DateTime = DateTime.Now '年・月をそれぞれ表示 txtYear.Text = CStr(dt.Year) txtMonth.Text = CStr(dt.Month)
現在日付を取得する為に、DateTime というクラスを利用しています。
クラスとは簡単に説明すると、目には見えないコントロールのようなものです。
TextBox コントロールは画面上でテキストを扱うには便利なコントロールですが、同じ様にDateTime クラスはコード上で日付を扱うのに便利なクラスです。
DateTime の Now には現在の日付に関する情報が入っていますので、それを利用できる様に同じ型の変数 dt を宣言して格納しています。
1行が長すぎる時に改行してコードを記述
_
「 _(半角スペース・アンダーバー)」
必須チェックのIf文の1行目の後ろに「 _」をつけて、長くなってしまった行を見やすく改行することが出来ます。
日付として合っているかを判定する前に、文字の整形
'日付として合ってるかチェック Dim sNowDate As String 'それぞれで日付の形に成形する(仮に1日とする) sNowDate = txtYear.Text & "/" & txtMonth.Text & "/1"
それぞれのテキストボックス年・月に、日付として正しい値が入っているかのチェックを行いたいのですが、そのままでは判定が難しくなってしまいます。
そこで一度、文字列連結を使って「XXXX / XX / 1」のように日付の形になるように整形しています。
ここでの「&」は文字列を連結させるという演算子です。
整形した日付から判定する分岐
If IsDate(sNowDate) And IsDate(sBirthDate) Then
日付のような形に整形した文字列を IsDate() というメソッドで判定しています。
IsDate は後ろのカッコの中の値が日付として正しければTrueを返してくれますし、日付として不成立ならFalseを返します。
ここでのIf文は、「sNowDate と sBirthDate の値は両方とも日付として正しいですか?」という意味を質問しています。
生まれ月と現在月の比較
If CInt(txtBirthMonth.Text) > CInt(txtMonth.Text) Then
動きのイメージ中ように、「生まれ月が現在月より大きい場合は、誕生日がまだ来ていない事として、計算した年齢よりも−1した歳を表示」したいので、その判定を行なっています。
「 > 」は学校の数学と同じように大小関係を評価できる演算子です。
演算子についてはこちらを参考にしてください。
さいごに
これで「はじめてのプログラミング VB」は終了となります。
楽しくプログラミングできたり、まだ難しいなと思ったり、人によって感想はそれぞれと思います。
ここではなるべく簡単にご説明できるように心がけてきましたが、言葉たらずで分かりにくい箇所もあったかも知れません。
もし、興味を持たれたとしたなら、自分で調べてみたりと本格的な勉強を始めてみる事をオススメします。