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/13 が 2021/1/1と2021/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/13 が 2021/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
リンク
コメント