• ベストアンサー

数字以外を排除するには

いつもお世話になっています。 数字以外が入力された場合エラーを出すには、IsNumeric()を使うのが一般的かと思いますが、¥やeやdは数字として認識していしまいます。これらもアウトにする方法というのはあるのでしょうか?

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

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

数値、文字列(テキストボックス値など)を1桁ずつ、チェック対象にして For K = 1 To Len(A) 、Mid(A, K, 1)の1文字について 文字コード(0-9、0-9)かどうかチェックしては。 どんな文字コードでも0-9、0-9は連続したコードになっているでしょう。 比較なら<と>が使え、 Case文ならToが使えるでしょう。 全角と半角両方認めるかどうか。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • tkrn
  • ベストアンサー率53% (33/62)
回答No.4

VB2005であれば、 Integer.TryParseメソッドで判定するのはどうでしょうか? Dim int As Integer If Integer.TryParse("123456", int) = True Then '数字の場合 Else '数字でない場合 End If

すると、全ての回答が全文表示されます。
noname#140971
noname#140971
回答No.3

[イミディエイト] ? IsNumber(123) True ? IsNumber("\123") False ? IsNumber(-123) True ? IsNumber("3e2") False ? IsNumber("123-") True ? IsNumber("001") False 手っ取り早いのは、このような IsNumber 関数などを自作することです。 もちろん、そのためには、 IsNumber 関数の仕様設計が先決です。 Public Function IsNumber(ByVal strNumber As String) As Boolean   Dim I As Integer   Dim L As Integer      L = Len(strNumber) * (Left$(strNumber, 1) <> "0") * -1   For I = 1 To L     If <I番目の桁が文字列 "0123456789+-" に含まれない> Then       Exit For     End If   Next I   IsNumber = CBool((I > L) And (L <> 0)) End Function ・For ループ手前で、チェックする桁数を確定する。 ・その場合、先頭が"0"ならばループ回数はゼロにする。 ・For ループでは、 <I番目の桁が文字列 "0123456789+-" に含まれない>を判定。 ・含まれなければ、テストを中止してループから抜ける。 ・I>L ならば、全てが数字に該当する文字だったということ。----> (I > L) ・L=0 ならば、当然に数字ではない。-----------------------> (L <> 0) ∴IsNumber = CBool((I > L) And (L <> 0)) <I番目の桁が文字列 "0123456789+-" に含まれない>の判定には、Instr関数、Mid$関数と用いるといいです。

すると、全ての回答が全文表示されます。
  • JAWS55
  • ベストアンサー率38% (176/452)
回答No.1

ここに数値チェック関数が載っています。 http://homepage1.nifty.com/rucio/main/technique/InputChk2.htm

すると、全ての回答が全文表示されます。

関連するQ&A