2010-11-19 11 views

答えて

2

を確認したい:

Function MyFunction(myString As String) As Boolean 
    MyFunction = ((Len(myString) = 5) And (IsNumeric(myString))) 
End Function 

あなたの場合より効率的な方法が必要な場合は、さまざまな方法についていくつかのテストを実行する必要があります人々は示唆した。

編集:以前の解決策はうまくいきませんでした(最初の2つのコメントを参照)。しかし、私はそれが受け入れられているので、そこに置いています。ここで私はどうなるのかです:

Function MyFunction(myString As String) As Boolean 
    Dim myDouble As Double 
    Dim myLong As Long 
    myDouble = Val(myString) 
    myLong = Int(myDouble/10000) 
    MyFunction = ((Len(myString) = 5) And (myLong > 0) And (myLong < 10)) 
End Function 

は、その関数には、エラー「保護」はありませんので、あなたは、22222222222222のような大きすぎる番号を確認しようとした場合、それは動作しません。

+2

- 例えば-3621は5文字で数値です。小数点(36.21)または千の区切り文字(3,621)も問題を引き起こします – barrowc

+0

十分に真です!また、文字列が "00005"の場合、それは私が考える検証をパスします。 – Tipx

4
yourString Like "#####" 
1

以前に尋ねた同様の質問:link text

は基本的にあなたが最も簡単な方法をしたい場合、あなたはこれで行くことができる

(Len(s) = 5) And IsNumeric(s) 
1

正規表現を使用してこの問題を解決することもできます。 VBAプロジェクトにMicrosoft VBScript Regular Expressions 5.5を含める場合、以下の関数のようにRegExpMatchCollection変数を使用できます。 (これはozgrid.comでthis postに対する応答の変形例である。)4桁負の数は、これらのテストの両方を通過する

Public Function FiveDigitString(strData As String) As Boolean 

On Error GoTo HandleError 

Dim RE As New RegExp 
Dim REMatches As MatchCollection 

    With RE 
     .MultiLine = False 
     .Global = False 
     .IgnoreCase = True 
     .Pattern = "^[0-9][0-9][0-9][0-9][0-9]$" 
    End With 

    Set REMatches = RE.Execute(strData) 
    If REMatches.Count = 1 Then 
     FiveDigitString = True 
    Else 
     FiveDigitString = False 
    End If 

    Exit Function 
HandleError: 
    Debug.Print "Error in FiveDigitString: " & Err.Description 
    FiveDigitString = False 
End Function 
関連する問題