VB.NETで日付の例外処理をマスター!エラーを防ぐ安心プログラミング
生徒
「先生、ユーザーが『2月30日』みたいなありえない日付を入力したとき、プログラムが急に止まってしまいました。どうすればいいですか?」
先生
「それは『例外(れいがい)』が発生したからですね。VB.NETには、そうした予期せぬエラーを優しく受け止める『例外処理』という仕組みがあるんですよ。」
生徒
「例外処理……。エラーが起きてもプログラムが強制終了しないように守ってくれる魔法のようなものですか?」
先生
「その通り!特に日付は間違いが起きやすい場所なので、守りを固めることが大切です。具体的な書き方を学んでいきましょう!」
1. 例外処理とは?プログラムの安全装置
プログラミング未経験の方が最初に驚くのは、パソコンは意外と融通が利かないという点です。例えば、日付を入れる場所に「あいうえお」と入力されたり、存在しない「13月」を指定されたりすると、パソコンは「どうすればいいか分からない!」とパニックになり、プログラムを強制的に終了させてしまいます。このパニック状態を専門用語で例外(れいがい)と呼びます。
例外処理とは、いわばプログラムの「安全装置」です。もしエラーが起きても、「エラーですよ」と優しく教えてあげたり、別の処理に切り替えたりすることで、アプリが突然消えてしまうのを防ぎます。日付を扱うプログラムでは、この安全装置を組み込むことが、使いやすいソフトを作るための第一歩となります。
2. 基本のTry-Catch文でエラーを捕まえる
VB.NETで例外処理を行う最も代表的な方法が、Try...Catch(トライ・キャッチ)文です。文字通り、「とりあえずやってみて(Try)、エラーが出たら捕まえて(Catch)」という意味です。これを使うことで、エラーが起きそうな場所をあらかじめ囲んで守ることができます。
例えば、文字を日付に変換しようとして失敗したときの守り方を見てみましょう。パソコン操作に慣れていないユーザーが、間違った形式で日付を入れた場面を想像してください。
Try
' 日付ではない文字を無理やり日付に変えようとします
Dim moji As String = "2026/02/30" ' 存在しない日付
Dim hizuke As DateTime = DateTime.Parse(moji)
Console.WriteLine("変換に成功しました!")
Catch ex As Exception
' エラーが起きたらここに来ます
Console.WriteLine("<i class="bi bi-exclamation-triangle"></i> エラーが発生しました:正しい日付を入力してください。")
End Try
実行結果は以下のようになります。
エラーが発生しました:正しい日付を入力してください。
もしTry...Catchを使っていなければ、ここでプログラムは真っ暗になって止まってしまいますが、これを使えばメッセージを表示して、次の処理へ進むことができます。
3. 特定のエラーだけを狙い撃ちする方法
エラーにはいろいろな種類があります。日付の変換で特によく起きるのが、形式がめちゃくちゃな場合の「FormatException(形式エラー)」です。VB.NETでは、すべてのエラーをひとまとめにするのではなく、「このエラーの時はこうする」と細かく指定することもできます。
これをマスターすると、ユーザーに対して「日付の形が違いますよ」とか「数字が大きすぎますよ」といった、より親切なアドバイスができるようになります。パソコン初心者の人にとって、具体的な理由が分かると安心しますよね。
Try
Dim input As String = "13月1日" ' 月が間違っている
Dim dt As DateTime = DateTime.Parse(input)
Catch ex As FormatException
' 書き方がおかしいとき
Console.WriteLine("<i class="bi bi-keyboard"></i> 日付の書き方が正しくありません(例:2026/01/01)。")
Catch ex As Exception
' その他の予想外のエラー
Console.WriteLine("<i class="bi bi-gear-wide-connected"></i> 予期せぬ不具合が起きました。")
End Try
実行結果は以下のようになります。
日付の書き方が正しくありません(例:2026/01/01)。
このように、エラーに合わせて対応を変えることで、アプリの信頼性がグンと高まります。
4. エラーを出さない工夫!TryParseを使おう
実は、例外処理にはもう一つ賢い方法があります。それは「そもそも例外を発生させないようにチェックする」という方法です。これに最適なのがTryParse(トライパース)という命令です。
これは「変換できるかどうか試してみて、成功したら結果を教えて。ダメだったら静かに教えて」という非常に控えめで使いやすい機能です。これを使うと、コードがスッキリして読みやすくなります。初心者の方は、まずこの方法を覚えるのが一番の近道かもしれません。
Dim nyuryoku As String = "あいうえお"
Dim kekkaHizuke As DateTime
' 変換できるか試します。成功すると True、失敗すると False が返ります
If DateTime.TryParse(nyuryoku, kekkaHizuke) Then
Console.WriteLine("変換成功:" & kekkaHizuke.ToLongDateString())
Else
Console.WriteLine("<i class="bi bi-x-circle"></i> 『" & nyuryoku & "』は日付として読み取れませんでした。")
End If
実行結果は以下のようになります。
『あいうえお』は日付として読み取れませんでした。
プログラムがパニックにならないので、とても「行儀が良い」書き方とされています。If文(条件分岐)を知っている人なら、すぐに使いこなせるはずです。
5. 最後に必ず実行するFinally(ファイナリー)
例外処理には、TryとCatchのほかにもう一つ、Finally(ファイナリー)というキーワードがあります。これは「成功しても失敗しても、最後に必ずこれだけはやってね!」という時に使います。
例えば、日付の計算をした後に「計算を終了しました」というログを残したり、開いていたファイルやネットワークの接続を閉じたりする時に大活躍します。後片付けをしっかりする、礼儀正しいプログラムには欠かせない機能です。
Try
Dim checkDate As DateTime = DateTime.Parse("2026/03/28")
Console.WriteLine("日付の確認が終わりました。")
Catch ex As Exception
Console.WriteLine("確認中にエラーが出ました。")
Finally
' 成功しても失敗しても、必ず表示されます
Console.WriteLine("<i class="bi bi-info-circle"></i> 処理を完了しました。システムを待機状態に戻します。")
End Try
実行結果は以下のようになります。
日付の確認が終わりました。
処理を完了しました。システムを待機状態に戻します。
6. 日付の範囲チェックも忘れずに
例外処理の応用として、変換ができるかどうかだけでなく「その日付が自分のアプリにとって適切か」をチェックすることも重要です。例えば、「未来の日付は入力できない」というルールがある場合、エラーとして処理する必要があります。
これも広い意味での例外的な状況への対応です。パソコンが自動で出してくれるエラーだけでなく、自分たちで「これはダメだよ」というルールを作って守ることで、データの正確性が保たれます。プログラミングは、こうした「ルールの積み重ね」でできているんですよ。
7. 初心者が例外処理で気をつけること
例外処理はとても便利ですが、何でもかんでもTry...Catchで囲めばいいというわけではありません。どこでエラーが起きているのか分からなくなってしまうこともあるからです。大切なのは、「ユーザーが入力する場所」や「外部のデータを取り込む場所」など、エラーが起きやすいポイントを絞って守ることです。
また、Catchしたときに何も表示しない(空っぽにする)のは一番やってはいけないことです。エラーが起きたのにプログラムが黙っていると、何が起きたか分からず原因究明が難しくなります。最低でも「エラーが起きたよ」という事実を記録したり表示したりするようにしましょう。
8. 例外処理を味方につけてプロ級のコードへ
日付の例外処理、いかがでしたか?プログラミング未経験の方にとって、エラーは少し怖いものに感じるかもしれません。しかし、例外処理という武器を身につければ、エラーは「プログラムをより良くするためのヒント」に変わります。
ユーザーがどんなに無茶な入力をしても、動じずに優しくガイドしてあげる。そんな「器の大きいプログラム」が書けるようになれば、初心者卒業も間近です。今回学んだTry-CatchやTryParseを、ぜひ自分のプログラムに取り入れてみてください。焦らず一歩ずつ、楽しみながら学んでいきましょう。あなたの書くプログラムが、より安全で頼もしいものになることを応援しています!