• ベストアンサー

vb6でテキスト入力の数字を判定したい。

お世話になります。 XPでvb6を使ってプログラムを作っています。 テキスト形式で入力された文字が数字の0から15までの数字かを判断したいのですが IsNumeric関数で数字か数字以外の文字かを判定した後、 VAL関数で判定とプログラミングしたところ 入力された値が”1d1”だと IsNumeric関数はTrue、VAL関数は10になり 正しい入力と判断されてしまします。 何かいい方法があればご教授頂きたく宜しくお願いします。 以上です。

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

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

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

090303kan
質問者

お礼

imogasi様 例題まで示して頂きありがとうございます。 ご指摘の注意事項に留意して作ってみます。 参照ページも見ながら試してみます。 以上 ありがとうございます。 投稿日時 - 2011-06-01 17:57:05

その他の回答 (2)

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.3

調べてませんが、”1d1”が指数表記みたいですね。 ちなみに、1d2は100。 この場合限定で簡単なのは、 数字の0から15までの数字かを判断するのだから、3文字以上あってはいけないので、 len(テキスト形式で入力された文字) < 3 の条件を入れたらいいと思いますが。

090303kan
質問者

お礼

Siegrune様 お礼が遅くなり申し訳ありません。 今回の場合、確かに3文字になった時点でNGなのですから 大変参考になりました。 以上 ありがとうございました。

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

正規表現を使うと便利です。 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

090303kan
質問者

お礼

nda23様 早々のご教授ありがとうございます。 参照ページも見ながら試してみます。 自分で簡単なファンクションを作成しないとだめなんですね。 運用に合うように試してみます。 以上 ありがとうございます。

関連するQ&A