饂飩コーディング

iOSアプリやら、Unityやら、Cocos2dやらごにょごにょ書いております

Accessのテクストボックスで日付に曜日をつけて日付比較する

サイトが引っ越しました。→https://scombu.com

約1秒後に自動的にリダイレクトします。切り替わらない場合はリンクをクリックしてください。

f:id:appdeappuappu:20201109223607p:plain
f:id:appdeappuappu:20201109223739p:plain
f:id:appdeappuappu:20201109224749p:plain


テキストボックスに日付をテキストでセットする場合、
規定値でFormat(Now(),"yyyy/mm/dd(aaa)")とすれば、曜日を日付の後ろに
セットすることができますが、デートピッカーで変更すると曜日が消えてしまいます。

さらに、日付の大小を比較するともちろんテキストなんでCdateで日付型に
キャストしてから比較するんですが、曜日(月)とか(火)等が入っているので
キャストできず型エラーになります。

そこでテキストボックスをlikeで *(*)* 文字パターンの存在チェックし
曜日がはいいていたら三文字取り除き、Cdateでキャストして日付比較します。

テキスト同士で比較すると絶対に予想しない動きをするので
必ずCdateで日付型にキャストしましょう。




日付テキストボックスが更新されたら、以下の処理をおこない曜日を右から添える。

Private Sub txtDayFrom_AfterUpdate()
    Me.txtDayFrom = changeToYoubiAdd(Me.txtDayFrom)
End Sub

Private Sub txtDayTo_AfterUpdate()
    Me.txtDayTo = changeToYoubiAdd(Me.txtDayTo)
End Sub


このFunctionは曜日付きでも曜日なしでも日付をstringで受け取り、
必要に応じて日付削除処理を行い、Date型でかえしています。そうすれば日付比較ができます。

Private Function changeToDateFormat(ByVal recieveDate As String) As Date

    '曜日が含まれていたらチェックして後ろから三文字削除する。
    If recieveDate Like "*(*)*" Then
        Dim i As Integer
        i = Len(recieveDate)
        i = i - 3
        changeToDateFormat = CDate(Left(recieveDate, i))
    Else
        changeToDateFormat = CDate(recieveDate)
    End If

End Function


テキストボックスへの曜日付加セット処理

Private Function changeToYoubiAdd(ByVal recieveDate As String) As String
    If recieveDate Like "*(*)*" Then
        '曜日あり
        changeToYoubiAdd = recieveDate
    Else
        '曜日なし
        changeToYoubiAdd = Format(CDate(recieveDate), "yyyy/mm/dd(aaa)")
    End If
End Function

日付の比較をしています。

Private Sub コマンド12_Click()

    If changeToDateFormat(Me.txtDayFrom) > changeToDateFormat(Me.txtDayTo) Then
        MsgBox ("左が大きいよ")
    Else
        MsgBox ("右が大きいよ")
    End If
    
    End Sub