【VBAスタンダード対策】セルの値が「日付」に変換できるかを判定する組み込み関数を攻略!
データ入力チェックにおいて、数値判定(IsNumeric)と並んで非常に重要なのが「値が日付として正しく評価・変換できるか」の判定処理です。VBAで用意されている専用の判定関数と、その判定ロジックを押さえましょう。
1. 問題:日付変換の可能性を判定する関数
【 問題 】 下記のコードは、セル A1 に入力されている値が日付(または日付として認識できる文字列)であるかを判定し、正しい日付形式の場合のみメッセージボックスに「有効な日付です」と表示しようとしています。空欄 ( A ) に入る正しいVBA組み込み関数はどれでしょうか?
Sub CheckDateCell()
Dim val As Variant
val = Range("A1").Value
If ( A )(val) Then
MsgBox "有効な日付です"
Else
MsgBox "日付ではありません"
End If
End Sub
Dim val As Variant
val = Range("A1").Value
If ( A )(val) Then
MsgBox "有効な日付です"
Else
MsgBox "日付ではありません"
End If
End Sub
① IsDateFormat
② IsDate
③ CDate
④ IsCalendar
2. 正解:日付判定関数に関する正解
正解: ② IsDate
3. 解説:IsDate 関数の役割と CDate 関数との違い
VBAで渡された値が「日付型データ」であるか、あるいは「日付を表す文字列(例: "2026/08/14" や "2026-08-14" など)」として認識可能かを判定するには IsDate 関数 を使用します。
[ 判定関数の構造と選択肢の罠 ]
1. 判定結果(戻り値)
2. 選択肢 ③ CDate との違い(超頻出トラップ!)
・IsDate:日付に変換できるか「調べる」関数(True / False を返す)
・CDate:文字列や数値を実際に日付型(Date型)へ「変換する」関数
★ 変換できない値に対して直接
1. 判定結果(戻り値)
IsDate(引数) は、引数が日付として有効であれば True、日付として認識できなければ(例: "abc" や "2026/02/30" など存在しない日付)False を返します。2. 選択肢 ③ CDate との違い(超頻出トラップ!)
・IsDate:日付に変換できるか「調べる」関数(True / False を返す)
・CDate:文字列や数値を実際に日付型(Date型)へ「変換する」関数
★ 変換できない値に対して直接
CDate("abc") を実行すると「型が一致しません」というエラーでプログラムが停止してしまいます。そのため、「まず IsDate でチェックしてから CDate で変換する」のがVBAの定石パターンです。ここが試験に出る!: スタンダード試験では、「判定を行う IsDate」と「型変換を行う CDate」の役割の違いを狙う問題が頻出します。If 条件式の中で判定用として使うのは IsDate であることを確実に識別できるようにしておきましょう。
4. まとめ
「日付に変換できるか調べるのは IsDate(値) 」。この判定関数をマスターしておけば、ユーザーが「2026/13/45」や「未定」といった不正な日付フォーマットをセルに入力した場合でも、処理を実行する前に安全にエラー検出を行えるようになります。
PR