\

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
'-------------------------------------------------------------------------------------
' 共通関数: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の範囲内) が表示されます。

1
2
3
4
5
6
7
8
9
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の範囲外)が表示されます。

1
2
3
4
5
6
7
8
9
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の範囲外)が表示されます。

1
2
3
4
5
6
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が返ってきます。

1
2
3
4
5
6
7
8
9
10
11
12
'チェック対象が日付型かどうか判定する。True:日付型、False:日付型ではない。
checkResult = IsDate(value)

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
'チェック対象が 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や個人アプリ開発者、システムエンジニアになりたい人と繋がりたい🐱