'日付文字列をチェックする関数 '以下の日付形式を有効とします。(年は西暦のみです。) 'yyyy/m/d yyyy/mm/dd yyyy/mm/d yyyy/m/dd '年は 4 桁、2 桁、1 桁に対応します。 '2 桁または 1 桁の場合は、51 以上を1900年代、50 以下を 2000年代と判定します。 '有効な日付の場合は Date 型の値を返します。それ以外は False を返します。 Option Explicit Function MyCDate(ByVal sDate As String) As Variant Dim dtDate As Date sDate = Trim(sDate) If sDate Like "##/*" Then If CInt(Left(sDate, 2)) >= 51 Then sDate = "19" & sDate Else sDate = "20" & sDate End If ElseIf sDate Like "#/*" Then sDate = "200" & sDate End If If IsDate(sDate) Then dtDate = CDate(sDate) If Format(dtDate, "yyyy/m/d") = sDate Then MyCDate = dtDate ElseIf Format(dtDate, "yyyy/mm/dd") = sDate Then MyCDate = dtDate ElseIf Format(dtDate, "yyyy/mm/d") = sDate Then MyCDate = dtDate ElseIf Format(dtDate, "yyyy/m/dd") = sDate Then MyCDate = dtDate Else MyCDate = False End If Else MyCDate = False End If End Function Sub Test_MyCDate() Dim sDate As String Dim vDate As Variant sDate = InputBox("日付を yyyy/m/d の形式で入力してください。") vDate = MyCDate(sDate) If VarType(vDate) = vbBoolean Then MsgBox sDate & " は正しい日付ではありません。", vbExclamation Else MsgBox Format(vDate, "yyyy/m/d") & " が入力されました。", vbInformation End If End Sub