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

速攻でメモできる QuickNote リリースしました!

QuickNoteは動作が超軽量でサクサクかけるノートアプリです。一瞬の閃きを逃さずにノートを開き書き始めることができます。 アカウント登録も不要です。お試しあれ!

Excel操作をコマンドで! proBoarderExcel

Excelはマウスで操作するのが基本ですが、マウス操作に疲れてはいませんか? キーボードでExcel操作ができるようになるアプリです。オープンソースで無料です。

積み上げ! Daily Stack リリースしました!

Daily Stack は日々の積み上げを管理するToDoアプリです。過去の積み上げの振り返りだけでなく、ツイート機能もあります。 アカウント登録不要ですぐに使い始めることができます。

ExecNote.app リリースしました!

ExecNoteは、コードが実行できるMarkdownアプリケーションです。Markdownドキュメント内に記載したコードをクリックすると実行ができます。わざわざターミナルを 起動させる必要がありません!無料ですのでもしよければダウンロードをお願いします。

About Me

11年目のシステムエンジニアです。アプリで生活や仕事を改善したい🐱仕事効率化、自動化のアプリ開発が得意です、ご相談ください。 🚀エンタメ系アプリの開発も模索中🐬社内SEや個人アプリ開発者、システムエンジニアになりたい人と繋がりたい🐱