こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ある文字列が全て数字であるかどうかをチェックするには?

一番効率のよいと思われる方法を教えて下さい。
一つ一つ数字であるか見る方法しか思いつきません。

投稿日時 - 2002-12-24 15:55:40

QNo.434913

すぐに回答ほしいです

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

Sub test01()
Dim a As String
a = InputBox("数=")
For i = 1 To Len(a)
If Asc(Mid(a, i, 1)) < 48 Or Asc(Mid(a, i, 1)) > 57 Then
MsgBox i & "字目でNon-Numeric"
Exit For
End If
Next i
End Sub

投稿日時 - 2002-12-25 00:25:02

ANo.9

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(9)

ANo.8

ダブル型や少数でもいいなら、#2さんのいうようにIsNumeric関数がベスト

銀行の口座番号のような、0-9ならLike演算子で判断がつきます。
(文字列を分解しないでも可能です。)
0-9以外の物を含む場合はエラーとしたらよいです。

Public Function myNumeric(inString As String) As Boolean
  myNumeric = Not (inString Like "*[!0-9]*")
End Function

投稿日時 - 2002-12-24 23:33:12

ANo.7

VBScriptのRegExpオブジェクトを使い、正規表現で判断するというのはいかがでしょうか。

<html>
<script Language="VBScript">

samplestr = "1234567890"

Set regEx = New RegExp
regEx.IgnoreCase = True
regEx.Global = True
regEx.Pattern = "\D"
msgbox regEx.test(samplestr)
Set regEX = nothing

</script>
</html>

上はVBScriptの構文です。
regEx.Pattern = "\D"は、数字以外の一文字にマッチの意味です。
regEx.test(string)がtrueならば、数字以外が含まれています。

VBからこのオブジェクトを使う場合は、参照設定で
Microsoft Scripting Runtimeオブジェクトを追加してください。
(IEのバージョン5以降が必要です。)

参考URL:http://www.microsoft.com/japan/msdn/library/ja/script56/html/vsobjregexp.asp

投稿日時 - 2002-12-24 18:43:09

ANo.6

if String(len(s),"0") <= s And s <=String(len(s),"9") then
とか

投稿日時 - 2002-12-24 17:56:26

ANo.5

こんにちわ。

これは例えば100文字の文字列とかを調べるんですよね?

やったことはないんですが、
面白そうなので一つ提案です。

------------------------------------------------------------
Replace関数で0から9まで10回まわして(vbNullStringあたりと置換)、
最後にもとの文字列と比較して何も変わっていなかったら、全部数字。
------------------------------------------------------------

これでどうでしょう。
処理効率のほうは知りません、MSに聞いてください(笑)

投稿日時 - 2002-12-24 17:43:05

ANo.4

効率は悪いですが...
一度数値型に直して再び文字列に変換、そして比較というのはどうでしょう?

Dim strData As String
Dim strBuff As String
Dim nData As Integer

strData = "12356"

nData = Int(Val(strData))

strBuff = nData

If strBuff <> strData Then MsgBox "数字以外もあるようです"

投稿日時 - 2002-12-24 16:36:25

ANo.3

こんにちは。maruru01です。

No.1の人の言う通り、1文字ずつMID関数とかで取り出して、チェックするしか思いつきません。
No.2の人の挙げたIsNumeric関数は、小数点やマイナス記号、さらには「3.5E-2」のような指数表示でも、Trueを返してしまいます。

投稿日時 - 2002-12-24 16:07:03

ANo.2

IsNumeric関数を使用してみてはいかがでしょうか?
Trueであれば数字って感じで…

投稿日時 - 2002-12-24 15:59:49

ANo.1

私も、そのようなチェックをする場合、ループさせて 一つ一つチェックさせます。
あと、.とか - とかも エラーとして弾いてましたので・・・。
-0.4 とかは、エラーとすることができます。

投稿日時 - 2002-12-24 15:59:20

あなたにオススメの質問