VBA 日付型かつ指定した範囲内かチェックする関数

VBAでフォームの入力チェックをする際、日付型でも指定した範囲内かどうかを判断する必要がある場合、簡単に入力チェックができる関数を作成してみました。

'-------------------------------------------------------------------------------------
' 共通関数:IsDateBetweent
' 機能:日付型かどうか、日付型の場合、fromDate ~ toDate の範囲内かチェックする
' 引数:value(チェック対象), fromDate(開始日・日付型), toDate(終了日・日付型)
' 返り値:True(日付型であり、fromDate~toDateの範囲内)
'     False(日付型ではない、またはfromDate~toDateの範囲外)
'-------------------------------------------------------------------------------------
Function IsDateBetween(value As Variant, fromDate As Date, toDate As Date) As Boolean

    'チェック結果を格納する変数 checkResult(Boolean型)
    Dim checkResult As Boolean

    '初期値の関数の返り値に True(日付型であり、fromDate~toDateの範囲内) を設定する
    IsDateBetween = True

    'チェック対象が日付型かどうか判定する。True:日付型、False:日付型ではない。
    checkResult = IsDate(value)

    'チェック結果がFalseの場合
    If (checkResult = False) Then

        '関数の戻り値にFalse(日付型ではない、またはfromDate~toDateの範囲外)を設定
        IsDateBetween = False

        '関数を終了する
        Exit Function
    End If

    'チェック対象が fromDate より前の場合
    If (value < fromDate) Then

        'チェック結果にFalseを設定
        checkResult = False
    End If

    'チェック結果がFalseの場合
    If (checkResult = False) Then

        '関数の戻り値にFalse(日付型ではない、またはfromDate~toDateの範囲外)を設定
        IsDateBetween = False

        '関数を終了する
        Exit Function
    End If

    'チェック対象が fromDate より後の場合
    If (value > toDate) Then

        'チェック結果にFalseを設定
        checkResult = False
    End If

    'チェック結果がFalseの場合
    If (checkResult = False) Then

        '関数の戻り値にFalse(日付型ではない、またはfromDate~toDateの範囲外)を設定
        IsDateBetween = False

        '関数を終了する
        Exit Function

    End If

End Function

1. 使い方

  • datevalueにチェックしたい値をセットします。
  • fromDateにチェックOKとする範囲の開始日をセットします。
  • toDateにチェックOKとする範囲の終了日をセットします。

最後の行のMsgBox (IsDateBetween(datevalue, fromDate, toDate))で判定が行われ、TrueまたはFalseがメッセージボックスに表示されます。

例1

この「例1」では、2021/5/132021/1/12021/12/31の範囲内であるため、True(日付型であり、fromDate~toDateの範囲内) が表示されます。

    Dim datevalue As Date
    Dim fromDate As Date
    Dim toDate As Date

    datevalue = #5/13/2021#
    fromDate = #1/1/2021#
    toDate = #12/31/2021#

    MsgBox (IsDateBetween(datevalue, fromDate, toDate))

例2

例2では、2022/5/132021/12/31 以降の日付になっているため、False(日付型ではない、またはfromDate~toDateの範囲外)が表示されます。

    Dim datevalue As Date
    Dim fromDate As Date
    Dim toDate As Date

    datevalue = #5/13/2022#
    fromDate = #1/1/2021#
    toDate = #12/31/2021#

    MsgBox (IsDateBetween(datevalue, fromDate, toDate))

例3

例3では、チェック対象がDate型ではないため、False(日付型ではない、またはfromDate~toDateの範囲外)が表示されます。

    Dim value As String
    Dim fromDate As Date
    Dim toDate As Date

    value = 2021/5/13
    MsgBox (IsDateBetween(value, datevalue, datevalue))

仕組み:Date型かどうかの判定方法

Date型かどうかは、IsDate()関数で判定ができます。

Date型であればTrue、Date型でなければFalseが返ってきます。

    'チェック対象が日付型かどうか判定する。True:日付型、False:日付型ではない。
    checkResult = IsDate(value)

    'チェック結果がFalseの場合
    If (checkResult = False) Then

        '関数の戻り値にFalse(日付型ではない、またはfromDate~toDateの範囲外)を設定
        IsDateBetween = False

        '関数を終了する
        Exit Function
    End If

仕組み:範囲内かどうかの判定方法

日付が範囲内かどうかは、IF文で判断します。不等号の条件文が正しいかどうかで判断が可能です。

    'チェック対象が fromDate より前の場合
    If (value < fromDate) Then

        'チェック結果にFalseを設定
        checkResult = False
    End If

    'チェック結果がFalseの場合
    If (checkResult = False) Then

        '関数の戻り値にFalse(日付型ではない、またはfromDate~toDateの範囲外)を設定
        IsDateBetween = False

        '関数を終了する
        Exit Function
    End If

    'チェック対象が fromDate より後の場合
    If (value > toDate) Then

        'チェック結果にFalseを設定
        checkResult = False
    End If

    'チェック結果がFalseの場合
    If (checkResult = False) Then

        '関数の戻り値にFalse(日付型ではない、またはfromDate~toDateの範囲外)を設定
        IsDateBetween = False

        '関数を終了する
        Exit Function

    End If


コメント

タイトルとURLをコピーしました