2010-11-19 2 views

답변

2

을 확인하려면 보다 효율적인 방법을 원한다면, 다른 메소드에 대한 몇 가지 테스트를 실행해야 할 것이다. 사람들이 제안했다.

편집 : 이전 솔루션은 제대로 작동하지 않지만 (처음 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

True이면 충분합니다! 또한 문자열이 "00005"이면 필자가 생각하는 유효성 검사를 통과합니다. – Tipx

4
yourString Like "#####" 
1

비슷한 질문은 이전 질문 :

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

당신 경우 : link text

은 기본적으로 당신이 간단한 방법을 원한다면, 당신이 함께 갈 수

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

정규식을 사용하여이 문제를 해결할 수도 있습니다. Microsoft VBScript Regular Expressions 5.5를 VBA 프로젝트에 포함 시키면 아래 함수와 같이 RegExpMatchCollection 변수를 사용할 수 있습니다. (이것은 ozgrid.com this post에 대한 응답의 변형이다.) 네 자리 음수 이러한 테스트 모두를 통과 할

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 
관련 문제