- ベストアンサー
vb6でテキスト入力の数字を判定したい。
お世話になります。 XPでvb6を使ってプログラムを作っています。 テキスト形式で入力された文字が数字の0から15までの数字かを判断したいのですが IsNumeric関数で数字か数字以外の文字かを判定した後、 VAL関数で判定とプログラミングしたところ 入力された値が”1d1”だと IsNumeric関数はTrue、VAL関数は10になり 正しい入力と判断されてしまします。 何かいい方法があればご教授頂きたく宜しくお願いします。 以上です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Isnunmber関数は文字列全体の、全部が数字であるかどうかを判定するものと思う。 質問のように途中に数字文字以外があると、他の方法が必要 やさしいのは文字列の1文字目からLen(x)までについてMid(x,i,1)の文字の文字コードが、48-57までかどうかを判断すれば(繰返してIFで聞けば)良い。 この辺数字文字コードは、古くからある貞一のコードなのだが、文字コード体系に注意してください。 ーー VBscりptで正規表現を使ってやるのがスマートだが、勉強するのに全般では時間がかかるが、この数字チェックだけなら、理解の早い人はすぐわかるかも。 WEBで拾うと strng="" の部分が問題の文字列 patrn = "^\d+$" が正規表現のパターン。 ^ 先頭から d+ 数字が何文字か続いて $ 終わりまで の意味。 http://msdn.microsoft.com/ja-jp/library/cc392437.aspxなど。 多言語だと多少変わるかもしれないので注意。 下記は小数点やスペース(先頭、交尾、途中)などの混じりも蹴る。 ーー Sub test01() 'Microsoft VBScript Regular Expressions 5.5」 を参照すること Dim regEx, retVal ' 変数を作成します。 Set objfs = CreateObject("Scripting.filesystemobject") Set regEx = New regexp ' 正規表現を作成します patrn = "^\d+$" 'strng = "12563" strng = "1256d" regEx.Pattern = patrn ' パターンを設定します。 regEx.IgnoreCase = False ' 大文字と小文字を区別するように設定します。 retVal = regEx.Test(strng) ' 検索をテストします。 MsgBox retVal If retVal Then RegExpTest = "文字列は数字ばかり。" Else RegExpTest = "文字列には数字以外有り。" End If MsgBox (RegExpTest) End Sub
その他の回答 (2)
- Siegrune
- ベストアンサー率35% (316/895)
調べてませんが、”1d1”が指数表記みたいですね。 ちなみに、1d2は100。 この場合限定で簡単なのは、 数字の0から15までの数字かを判断するのだから、3文字以上あってはいけないので、 len(テキスト形式で入力された文字) < 3 の条件を入れたらいいと思いますが。
お礼
Siegrune様 お礼が遅くなり申し訳ありません。 今回の場合、確かに3文字になった時点でNGなのですから 大変参考になりました。 以上 ありがとうございました。
- nda23
- ベストアンサー率54% (777/1415)
正規表現を使うと便利です。 Function 数字チェック(ByVal 文字列 As String) As Boolean Dim 正規表現 As Object Set 正規表現 = CreateObject("VBScript.RegExp") 正規表現.Pattern = ".*\D+.*" 数字チェック = Not 正規表現.Test(文字列) End Function これは文字列が全て数字だとTrue、数字以外が含まれると Falseを返す関数の例です。これと数値化した時の範囲の チェックを組み合わせればよいでしょう。 詳しくは以下を参照してください。 http://msdn.microsoft.com/ja-jp/library/cc392487.aspx
お礼
nda23様 早々のご教授ありがとうございます。 参照ページも見ながら試してみます。 自分で簡単なファンクションを作成しないとだめなんですね。 運用に合うように試してみます。 以上 ありがとうございます。
お礼
imogasi様 例題まで示して頂きありがとうございます。 ご指摘の注意事項に留意して作ってみます。 参照ページも見ながら試してみます。 以上 ありがとうございます。 投稿日時 - 2011-06-01 17:57:05