VBA

【VBA】ユーザーフォームのテキストボックスに日付以外入力できないようにする

記事内に商品プロモーションを含む場合があります
  • ユーザーフォームのテキストボックスに
    日付以外の入力を受け付けないようにします。
  • yyyymmdd形式で入力しても「yyyy/mm/dd」形式に変換します。
    例:20210505と入力 ⇒ 2021/05/05

こんにちは、hokkyokunです。
ユーザーフォームのテキストボックスに
日付しか入力できないようにするマクロご紹介します。

エクセルシート上でテキストボックスを作成し、
日付以外の入力を受け付けないようにする方法はこちらで解説しています。

コード(コピペOK)

プログラムを書いてみました。
結論、下記のコードをコピペしてもらえば大丈夫です。
貼り付けるところなど使い方はこのコードの下に書かせていただきました。

Private Sub TextBox1_Change()
Dim Val As Variant
Val = Me.TextBox1.Value

'文字列が何か入力されているときに動くようにする。
If Len(Val) <> 0 Then

    '入力された値の右端=新規入力された値が数値がどうか判断
    '数値じゃない場合右端の文字を消す
    If IsNumeric(Right(Val, 1)) = False Then
        Val = Left(Val, Len(Val) - 1)
    End If
    
    '文字数が5になる=yyyymのmに相当するので
    'yとmの間に「/」を入れる
    If Len(Val) = 5 Then
        Val = Left(Val, 4) & "/" & Right(Val, 1)
    End If
    
    '文字数が8になる=yyyy/mmdのdに相当するので
    'mとdの間に「/」を入れる
    If Len(Val) = 8 Then
        Val = Left(Val, 7) & "/" & Right(Val, 1)
    End If
End If

'文字数が10=yyyy/mm/ddになったので
'日付になっているかどうか判定
If Len(Val) = 10 Then
    If IsDate(Val) = False Then
        MsgBox ("日付になっていません。入力し直してください")
        Val = ""
    End If
End If

'調整したValをテキストボックスに返す
Me.TextBox1.Value = Val

End Sub

使い方

ユーザーフォームにコードを書き込むところから説明します。
ユーザーフォームって何?って方は
別途記事を書きますので、すみません、お待ちください。

ユーザーフォームを作成

ユーザーフォームを挿入し、テキストボックスを作成してください。
今回はシンプルにテキストボックスを一つだけ作りました。

ユーザーフォームのコードを表示してコピペ

準備完了です。

実際に使ってみます

「20210506」と入力してみると
下記のようになります。

ここからBack spaceを2回押して「06」を消してみます。
後ろの「/」が自動的に消えると思います。

ありえない日付を入力してみます。
メッセージボックスが出て、
テキストボックスのデータは消えます。

私が最初に勉強した本です。
体系だって説明されているので今でも重宝しています。