Excel VBA 日付の前月取得、形式変更、入力チェックなど

 
ここでは、ユーザーフォームに配置したテキストボックスに対して記述した処理のまとめです。
シート上のセルに対して使いたい時は、お手数ですが状況に合わせて読み替えてください。
 
 
1. 前月を取得する
Private Sub UserForm_Activate()
 
    FrmMain.txtDate.SetFocus
    '対象年月初期表示(前月)
    FrmMain.txtDate.Text = Format(DateAdd("m", -1, Date), "yy/mm")
 
End Sub
 
------------------------------
 
2. 形式を変更する
'「YYMM」の形式であるものを「YY/MM」の形式に変更する
Private Sub txtDate_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 
    If Len(Me.txtDate.Text) = 4 And InStr(Me.txtDate.Text, "/") = 0 Then
 
        Me.txtDate = Left(Me.txtDate.Text, 2) & "/" & Right(Me.txtDate.Text, 2)
 
    End If
 
End Sub
 
------------------------------
 
3. 入力チェック
①未入力
If TRIM(Me.txtDate.Text) = "" Then
 
    IntRes = MsgBox("対象年月を入力して下さい。", vbOKOnly + vbCritical, "入力項目エラー")
    Me.txtDate.SetFocus
    Exit Sub
 
End If
 
②入力形式チェック
※ここでは年、月どちらにも0を含めたいため、2009年9月を「09/09」と入力する想定
 
If (Len(TRIM(Me.txtDate.Text))) = 5 And
   (Mid(TRIM(Me.txtDate.Text), 1, 1) <> "/") And
   (Mid(TRIM(Me.txtDate.Text), 2, 1) <> "/") And
   (Mid(TRIM(Me.txtDate.Text), 3, 1) = "/") And
   (Mid(TRIM(Me.txtDate.Text), 4, 1) <> "/") And
   (Mid(TRIM(Me.txtDate.Text), 5, 1) <> "/") Then
 
    '日付の整合性チェック
    If DateCheck(TRIM(Me.txtDate.Text)) = False Then
        IntRes = MsgBox("対象年月の入力が正しくありません。", vbOKOnly + vbCritical, "入力項目エラー")
        Me.txtDate.SetFocus
        Exit Sub
    Else
        p_StrDate = StrConv(Format(TRIM(Me.txtDate.Text) & "/01", "yymm"), vbNarrow)
    End If
 
Else
 
    IntRes = MsgBox("対象年月はYY/MM形式で入力して下さい。", vbOKOnly + vbCritical, "入力項目エラー")
    Me.txtDate.SetFocus
    Exit Sub
 
End If