テキストボックスの文字数を制限する


もし、ユーザーに入力してもう文字数に制限があった場合、入力された文字列が何か・・・より先に、そもそも文字数が制限の範囲内なのかを調べなければなりません。たとえば下図のようにパスワードを入力してもらうUserFormだったとき、入力すべきパスワードが最大で4文字だとしたら、5文字以上は入力させないようにしておけば、とりあえず文字数の問題は解決ですね。

テキストボックス内の文字列が変更されると、TextBoxのChangeイベントが発生します。ここにコードを書いておけば、入力された文字数をリアルタイムでチェックできます。

Private Sub TextBox1_Change()
    Me.Caption = Len(TextBox1.Text) & "文字"
End Sub

これを利用して「入力された文字数が4を越えたかどうか」を判定してみましょう。注意すべきは、Changeイベントが発生するタイミングです。Changeイベントは入力が完了した後に発生します。つまり、入力されたのが5文字だったとき、5文字目が入力されてからマクロが実行されることになります。つまり、4文字までしか入力させないようにしても、一時的には5文字目が入力されていることになります。

Private Sub TextBox1_Change()
    If Len(TextBox1.Text) > 4 Then
        ''すでに5文字目が入力されている
    End If
End Sub

4文字しか「入力させない」のだとしたら、一時的に入力されてしまった5文字目だけを消さなければなりません。これは、発想を変えればいいです。5文字目を消すのではなく、先頭から4文字目だけを有効にすればいいんです。つまり

・5文字目が入力される
   ↓
・Changeイベントで「5文字入力された」ことを感知
   ↓
・Changeイベントのマクロで「先頭から4文字分」をテキストボックスに入れ直す
となります。

Private Sub TextBox1_Change()
    If Len(TextBox1.Text) > 4 Then
        TextBox1.Text = Left(TextBox1.Text, 4)
    End If
End Sub

これで、テキストボックスには4文字しか入力できなくなりました。だけど、実はもっと簡単な方法があるんです。TextBoxのMaxLengthプロパティは、そのテキストボックスに入力できる最大文字数を設定できます。まさに、今回のテーマにぴったりのプロパティです。

このように設定しておけば、テキストボックスには4文字しか入力できなくなります。文字数の制限をしないときは、MaxLengthプロパティに0を指定します。

なお、本コンテンツで紹介したLeft関数や、MaxLegthプロパティは、いずれも全角と半角を区別しません。テキストボックス内の全角と半角を区別する方法は、下記のページを参考にしてください。