- 締切済み
エクセルTextBoxに入力できる値を限定したい
VBA初心者です。 エクセルのユーザーフォームでtextboxからの入力できる値を、1~10の整数か""(未入力)以外の場合にエラールーチンにgotoさせたいのですが、条件をすべて満足させる条件式が考えつきません。 お知恵を拝借できないでしょうか。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
テキストボックスは、テキストボックスへのデータ入力の終了を知らせる良い仕組みが内容に思う。 (1)キー入力をした都度チェックする これでも入力の終わりは、コマンドボタンクリックなどが、別途必要と思う。 (2)コマンドボタンを(設け、テキストボックスへ入力終了後に)クリックしたとき、テキストボックスのテキストの文字列を全桁チェックする のような方式が考えられると思うが、初心者にはこのイベントの扱い、イベントの選択が難しいと思う。 当面勉強が進むまでは、INPUTBOXなどで対処したらどうか。 下記は十分自信はないが、一応挙げてみる。もっと良い回答(イベントの扱い方)が出れば、無視してください。 ただし(1)か(2)のどちらか一方を入れること。 ーー テキストボックスへの入力は半角数字に限るという内容。 (1)即座チェック Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii < 48 Or KeyAscii > 57 Then MsgBox "数字入力のこと" SendKeys "{BKSP}" End If End Sub (2)一括チェック Private Sub CommandButton1_Click() For i = 1 To Len(TextBox1.Text) n = Mid(TextBox1.Text, i, 1) If Asc(n) < 46 Or Asc(n) > 57 Then MsgBox "数字入力のこと" TextBox1.Text = "" TextBox1.SetFocus Exit Sub End If Next i '(テキストを使った処理) End Sub
お礼
早速のご回答、ありがとうございます。 やはり初心者には難解な条件のようですね (^^ゞ 実際のフォームにはテキストボックスが5個ありますので、その都度INPUTBOXというのはあまり適していないかと思います。 これらに入力後コマンドボタンを押すと、エラーチェックの後ワークシートに転記しますが、入力条件が面倒なのは5個のうちのひとつだけです。IF~THEN~ELSE IF とかで回避できればと思うのですが、入力内容を数字として取り込むと、""の場合が上手くいきませんし、小数の場合も別途判断が必要。文字列で取り込んでも問題があるんですよね・・・