ExcelのVBAアプリケーションでフォームから数字を入力する場面がありますが、用意したテキストボックスに数字以外を入力されると以降のプログラム中でエラーが出る場合が多いと思います。その対策として、数字以外が入力されると再入力をさせる、などの対応も考えられますが、そんなことをするよりも、最初から数字以外を入力させないようにすればOKです。
はじめに
何をするプロシージャか
数字以外を入力させないようにする、テキストボックスのイベントプロシージャです。
作成方法
テキストボックスの配置
対象のフォームにテキストボックスを配置します。例えば、年齢を入力させる、などが考えられます。
プロパティ
配置したテキストボックスのプロパティでIMEModeを3-fmIMEModeDisableに設定します。これにより、IMEが起動しないので、入力を半角に固定でき、カナや漢字が入力できなくなります。
イベントプロシージャ
フォームに配置したテキストボックスをダブルクリックしてコードウィンドウを開きます。テキストボックスのデフォルトイベントChangeのプロシージャを書くように準備されてしまいますが、イベントリストからKeyPressを選択します。
KeyPressのイベントプロシージャを書くように準備されます。引数KeyAsciiが自動的に設定されますが、ここをいじる必要はありません。
Changeイベントの方は他に使う予定がなければ削除してもOKです。
以下の3行を追加するだけです。簡単ですね。
1 2 3 4 5 6 7 |
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If Chr(KeyAscii) < "0" Or Chr(KeyAscii) > "9" Then KeyAscii = 0 End If End Sub |
何が起こっているか
何かキーが押されると、KeyPressイベントが発生し、押されたキーのアスキーコードがKeyAsciiに渡されます。
そのコードが0から9以外の場合に、KeyAsciiに0が代入され、何もキーが押されなかったことになります。
おわりに
このように整数以外を入力させないように、ユーザーが誤った操作をしてもエラーを発生させないようにすることを安全工学用語では「フール・プルーフ」といいますが、そこまでいうのはちょっと大げさなので別の言い方をすると、バリデーションチェック(Validation Check=入力制限)でしょうか。
Excelのセルにも入力制限機能がありますよね。いろいろ応用が可能です。