フォームのテキストボックスに小数点を含む数値のみ入力させる。

以前,フォームに配置するテキストボックスを数字入力専用にするケースを紹介しましたが,これだと正の整数しか入力できないので,小数点を含む正の自然数を入力できるように改変します。

はじめに

何をするプロシージャか

少数フォーマット以外の数字以外を入力させないようにする、テキストボックスのイベントプロシージャです。
例えば、身長や体重の入力欄を作る場合などに使えます。

作成方法

作成方法の流れは「テキストボックスに数字のみ入力させる。」の説明を参考にしてください。

前回同様,あらかじめ配置したテキストボックスのプロパティでIMEModeを3-fmIMEModeDisableに設定した上で、KeyPressイベントプロシージャを作成します。
フォームの編集画面から,少数だけ入力させたいテキストボックス(以下,TextBox1として説明します)をダブルクリックしてVBEに移ると,デフォルトではTextBox1_Changeのプロシージャを作成する画面になると思いますが,プロシージャを切り替えてKeyPress(キーが押された時)を選択します。そうするとPrivate Sub ~ End Subの部分が自動的に作成されます。詳しくは「テキストボックスに数字のみ入力させる。」の説明を参考にしてください。

ソースコード

1行目

カッコ内のByVal KeyAscii As MSForms.ReturnIntegerの部分は意味がわからなくても変更してはいけません。テキストボックスにカーソルがある状態で何らかのキーが押された時にKeyPressというイベントプロシージャがKeyAsciiという引数とともに引き起こされます。KeyAsciiはその文字の通り,押されたキーのアスキー番号です。

2行目

KeyAsciiによる文字が0~9かピリオド以外の場合,KeyAsciiを0にします。KeyAsciiが0ということは,何もキーが押されなかったことになります。

3行目

小数点は当然1つまでですので,ピリオドが押され,かつ,すでにピリオドが含まれる場合もKeyAsciiを0にします。

4行目

このプロシージャを抜けた後,KeyAsciiが0でなかったら,テキストボックスにその文字が追加入力されるようになります。

おわりに

上記のコードは正の自然数の例ですが,負の数も入れたい場合も応用出来ると思います。(最初の1文字目でない場合にマイナスが押されるとKeyAsciiを0にする。)

関連記事