ACCESS IsDate関数で日付か否かを判定する方法

ACCESSはデータ型が重要です。
特に変数を扱う時は異なるデータ型の値が入力されるとエラーになってしまいます。
例えば、日付型のデータを入力してほしいのに、数値や文字列が入力されると困ります。
今回は、そんな時に便利なIsDate関数で日付か否かを判定する方法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSをもっと使いこなしたい方向けにACCESSの関数をご紹介していきます。
IsDate関数とは
IsDate関数とは、引数に指定した値が日付型であればTrueを、それ以外であればFalseを返す関数です。
以下の構文で利用します。
IsDate ( 値 )
非常にシンプルなので使いやすい関数ですね。
いくつか判定例を示します。
式 | 結果 | 備考 |
---|---|---|
IsDate(#2025/2/12#) | True | 日付を入れたためTrue |
IsDate(2025/2/12) | False | 値を#で囲っていないため文字列型とみなされてFalse |
IsDate(#25/2/12#) | True | 値を#で囲っていれば短縮しても日付として認識するためTrue |
IsDate(#2025/02/12#) | True | 値を#で囲っていれば数値が一桁の場合に0を足しても日付として認識するためTrue |
IsDate関数の利用例
それでは、実際にVBAでIsDate関数を利用する例をご紹介します。
今回は、以下のような入力画面を表示し、ユーザーが入力した日付を日付型の変数に格納した上でメッセージ表示する、という機能です。

この際、日付以外を入力されてしまうと以下のようなVBAのエラーが出てしまいます。

これでは何のことかわからずにユーザーが困ってしまいますね。
そのため、日付以外の値が入力された場合に正しいアラートメッセージを出せるようにしたいと思います。
そこで、以下のプロシージャを作成しました。
Private Sub seikyu_bi_input()
Dim seikyu_bi_tmp As String
Dim seikyu_bi as Date
'請求日指定
seikyu_bi_tmp = InputBox("請求日を入力してください。", "請求日入力", Date)
'請求日妥当性判定
If IsDate(seikyu_bi_tmp) = False Then
MsgBox "請求日に入力された値が不適切です。", vbCritical + vbOKOnly, "請求日指定不備"
Exit Sub
End If
seikyu_bi = seikyu_bi_tmp
MsgBox seikyu_bi
End Sub
実際に動かしてみると以下のように動作します。
まず、請求日を入力するインプットボックスが表示されます。

日付を正しく入力すれば問題なくメッセージボックスで日付が表示されます。

一方で日付以外の値を入力すると、IsDate関数のチェックによりアラートメッセージが表示されます。

それでは、プロシージャの内容を解説しましょう。
最初にInputBox関数でユーザーに日付を入力させます。
seikyu_bi_tmp = InputBox("請求日を入力してください。", "請求日入力", Date)
この際、最終的に利用するseikyu_biという変数ではなく、いったんseikyu_bi_tmpという別の変数にInputBoxの入力値を格納します。
seikyu_bi_tmpはDate型ではなくString型に設定してあります。
これは、日付以外の文字列が入力されてしまった場合に、VBAのエラーを出さないための配慮です。
String型の変数にしておけば、想定外の値が入った場合も文字列として変数に格納することが可能です。
そして、IsDate関数を使って入力された値(seikyu_bi_tmp)に格納された値が日付型か否かを判定します。
'請求日妥当性判定
If IsDate(seikyu_bi_tmp) = False Then
MsgBox "請求日に入力された値が不適切です。", vbCritical + vbOKOnly, "請求日指定不備"
Exit Sub
End If
ここでは、If文でIsDate関数の判定結果を条件式とし、IsDateの結果がFalse、つまり日付以外の値が入力されていた場合にはMsgBox関数でアラートメッセージを表示するようにしています。
こうすることにより、InputBoxで想定外の値が入力された場合に、VBAのエラーが出てしまうことが防げます。
このように、IsDate関数をエラー処理ルーチンに利用することで、より完成度の高いACCESSデータベースが構築可能です。
以上、IsDate関数で日付か否かを判定する方法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

最後までお読みいただき、ありがとうございました。