VBAのテキストボックスに特定の文字だけを入力できるようにする方法
VBAのテキストボックスに特定の文字だけを入力できるようにする方法を紹介します。
1.問題点
Excelシートにテキストボックスを表示させるには、「開発」タブをクリックして「挿入」→「テキストボックス」を選択します。
これでテキストボックスが表示されました。
このテキストボックスには任意の文字が入力できます。
このテキストボックスに特定の文字だけを入力できるようにしたい、たとえば数字だけを入力できるようにしたいのですが、その方法がわかりません。
2.特定の文字だけを入力できるようにする
特定の文字だけを入力できるようにするには、Alt+F11でVBEを開き、左のツリーからテキストボックスを表示させているシート名をダブルクリック。
右ペインの「(General)」というプルダウンから「TextBox1」を選択(複数のテキストボックスを作っている場合、「TextBox1」の数字の部分は変わります)。このあと「Private Sub TextBox1_Change()~End Sub」というコードが表示されますが無視してください。
カーソルをさきほど表示されたコードの直前か直後に移動したあと、右側のプルダウンから「KeyPress」を選択。
これで次のコードが表示されます。
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
End Sub
数字だけを入力できるようにするには、上記のコードに赤色部分を追加します。
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii < 48 Or KeyAscii > 57 Then
KeyAscii = 0
End If
End Sub
これでテキストボックスに数字以外の文字が入力できなくなります。
3.解説
TextBox1_KeyPress()という関数(イベントプロシージャ)はキーが押されたときに起動する関数です。
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
この関数の引数KeyAsciiは、押されたキーのアスキーコードになります。
この引数を判定し、数字以外の文字、つまりアスキーコードが48~57の範囲であれば変数KeyAsciiに0を設定することで、キー入力を無効にすることができます。
4.ASCIIコード一覧
ASCIIコードを調べるには、Googleで「ASCIIコード」で調べればよいでしょう。
とりあえず以下のページを紹介しておきます。
ASCIIコードの見方がよくわからない場合、さきほどのコードを次のように修正して、入力文字のASCIIコードを調べてもよいでしょう。
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
MsgBox KeyAscii
End Sub