エクセル|TextBoxに日付け入力

気分転換にUserFormのTextBoxにありえない月日は入力できないコードを書きました。
ただし2月は閏年に関係なく29日まで入力できます。
UserFormにTextBoxを一つ配置し、以下のコードを入力またはコピー貼付けしてください。

Private TextValue As String ‘TextBox1入力制限
‘———————————————————————-
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
‘——————————————-
‘月日入力
‘——————————————-
Dim d As String
Dim l As Long

d = Me.TextBox1.Value
l = Len(d)

‘テキストボックスの文字数
Select Case l
  Case 0 ‘1文字目
    Select Case KeyAscii.Value
      Case VBA.Asc(“1”) To VBA.Asc(“9”)
        TextValue = d
      Case Else
        KeyAscii.Value = 0
      End Select
  Case 1 ‘2文字目
    If Left(d, 1) = “1” Then
      Select Case KeyAscii.Value
        Case VBA.Asc(“0”) To VBA.Asc(“2”), VBA.Asc(“/”)
          TextValue = d
        Case Else
          KeyAscii.Value = 0
      End Select
    End If
    If Left(d, 1) <> “1” Then
      Select Case KeyAscii.Value
        Case VBA.Asc(“/”)
          TextValue = d
        Case Else
          KeyAscii.Value = 0
      End Select
    End If
  Case 2 ‘3文字目
    If Mid(d, 2, 1) = “/” Then
      Select Case KeyAscii.Value
        Case VBA.Asc(“1”) To VBA.Asc(“9”)
          TextValue = d
        Case Else
          KeyAscii.Value = 0
      End Select
    End If
    If Mid(d, 2, 1) <> “/” Then
      Select Case KeyAscii.Value
        Case VBA.Asc(“/”)
          TextValue = d
        Case Else
          KeyAscii.Value = 0
        End Select
    End If
  Case 3 ‘4文字目
    If Left(d, 1) = “2” And Mid(d, 3, 1) = “3” Then
      KeyAscii.Value = 0
    End If
    If Mid(d, 3, 1) = “/” Then
      Select Case KeyAscii.Value
        Case VBA.Asc(“1”) To VBA.Asc(“9”)
          TextValue = d
        Case Else
          KeyAscii.Value = 0
      End Select
    ElseIf Mid(d, 3, 1) > 3 Then
      KeyAscii.Value = 0
    ElseIf Mid(d, 3, 1) = 3 Then
      Select Case Left(d, 1)
        Case “1”, “3”, “5”, “7”, “8”
          Select Case KeyAscii.Value
            Case VBA.Asc(“0”) To VBA.Asc(“1”)
              TextValue = d
            Case Else
              KeyAscii.Value = 0
          End Select
        Case “4”, “6”, “9”
          Select Case KeyAscii.Value
            Case VBA.Asc(“0”)
              TextValue = d
            Case Else
              KeyAscii.Value = 0
          End Select
        End Select
    End If
  Case 4 ‘5文字目
    If Mid(d, 2, 1) = “/” Then
      KeyAscii.Value = 0
    End If
    If Mid(d, 4, 1) > 3 Then
      KeyAscii.Value = 0
    ElseIf Mid(d, 4, 1) = 3 Then
      Select Case Left(d, 2)
        Case “10”, “12”
          Select Case KeyAscii.Value
            Case VBA.Asc(“0”) To VBA.Asc(“1”)
              TextValue = d
            Case Else
              KeyAscii.Value = 0
          End Select
        Case “11”
          Select Case KeyAscii.Value
            Case VBA.Asc(“0”)
              TextValue = d
            Case Else
              KeyAscii.Value = 0
          End Select
      End Select
    End If
  Case Else
    KeyAscii.Value = 0
End Select

End Sub

準備ができましたら、TextBoxにいろんな日付を入力して確認してください。
TextBoxの入力モードを「半角英数」にしてくださいね。
どこかに穴があるかもしれません。
ご利用は自己責任でお願いします。

by わだまさつか