• ベストアンサー

入力チェックについて

体重を入力するテキストボックスがあります。 整数部分と小数部分は分けないので、 入力できる種類は半角数字とドットです。 整数部分は3桁まで、小数点以下は第一位までとする 入力チェックをつけたいのですが、 整数部分と小数点部分を別々にチェックするにはどのような命令を使用すればよいでしょうか。 (60, 60.1 , 105 などのパターンが考えられると思います。)

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

VBのバージョンがありません。 Splitで整数部と小数部に分けるか、 正規表現を使って判断します。 'Splitによる方法 Function チェック(ByVal T As String) As Boolean Dim N If T = "" Then     '入力無し     Exit Function End If If Not IsNumeric(T) Then     '数値でない     Exit Function End If N = Split(T, ".") Seelct Case Len(N(0))   Case 0     '整数が無い     Exit Function   Case 1 To 3 : 'OK   Case Else     '整数が3桁以上ある     Exit Function End Select If UBound(N) = 1 Then     Select Case Len(N(1))       Case 0         '少数が無い         Exit Function       Case 1 : 'OK       Case Else         '少数が1桁以上ある         Exit Function     End Select End If チェック = True End Function '正規表現による方法 Function チェック(ByVal T As String) As Boolean Dim N Set N = CreateObject("VBScript.RegExp") N.Pattern = "(^\d{1,3}$)|(^\d{1,3}\.\d{1}$)" チェック = N.Test(T) End Function どっちが楽か一目瞭然ですね。

craftx
質問者

お礼

ありがとうございます。 わかりやすいソースでした。splitは便利ですね。 追加で質問なのですが、半角カナ文字以外の入力時エラーにするチェック方法を教えて頂けませんか。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

VBの質問らしいが、VB.NETかエクセルVBAか(VB6か)など標題に明記すべきあd。 VBAなら 入力された数の桁数の捕捉について Private Sub TextBox1_LostFocus() x = Val(TextBox1.Text) MsgBox x MsgBox Int(x) MsgBox Len(Int(x)) '-- p = InStr(TextBox1.Text, ".") MsgBox p n = Len(x) - p MsgBox n End Sub が参考になるだろう。 参考 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=24247&forum=7 の「きくちゃん」 >小数点以下数として x-Int(x) を使うのは危ない。 ーーー 桁数でとらえず 単純に999.99より小などと、事実上で、量的に表せないのかな。

craftx
質問者

お礼

ありがとうございました。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

半角カナにマッチする正規表現は以下の通りです。 Finction 半角カナ(ByVal T As String) As Boolean Dim 正規表現 As Object Set 正規表現 = CreateObject("VBScript.RegExp") 正規表現.Pattern = "^[。-゜]+$" 半角カナ = 正規表現.Test(T) End Function 上記は空文字列は不可です。 もし、空文字列をOKにする場合は"^[。-゜]*$"とします。 正規表現は応用範囲が広いので、覚えておかれると 便利です。コテコテ1文字ずつ調べたくないですよね。 http://msdn.microsoft.com/ja-jp/library/cc392487.aspx http://msdn.microsoft.com/ja-jp/library/ae5bf541(VS.80).aspx

craftx
質問者

お礼

ありがとうございました。

  • yhc3594
  • ベストアンサー率27% (25/92)
回答No.1

InStr 関数を使って、小数点の位置を見つけてはどうですか? その後、mid関数で、対象情報を取り出して桁数を判定する。 *小数点が2個入力された場合などを考慮して、事前に  isnumericで数値判定をしておくと、より正確なチェックとなります。

craftx
質問者

お礼

ありがとうございます。 その3つの関数を使うとできますね。 追加で質問なのですが、半角カナ文字以外の入力時エラーにするチェック方法を教えて頂けませんか。

関連するQ&A