Убедитесь, что строка представляет собой 5-значное число - PullRequest
0 голосов
/ 19 ноября 2010

Я хочу вернуть true, если несколько строк = 'XXXXX'

Где каждый X - это число от 0 до 9

Я знаю, что должно быть дюжина способов сделать это, но я хотел бы знать лучший способ.

Ответы [ 4 ]

4 голосов
/ 19 ноября 2010
yourString Like "#####"
2 голосов
/ 19 ноября 2010

Если вы хотите самый простой способ, вы можете пойти с этим:

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

Если вы хотите более эффективный способ, вам придется запустить несколько тестов для различных методов, предложенных людьми.

Edit: предыдущее решение не работает хорошо (см. Первые 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, оно не будет работать.

1 голос
/ 05 мая 2011

Вы также можете использовать регулярные выражения для решения этой проблемы. Если вы включите регулярные выражения Microsoft VBScript 5.5 в свой проект VBA, вы можете использовать переменные RegExp и MatchCollection, как показано ниже. (Это модификация ответа на этого поста на ozgrid.com.)

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
1 голос
/ 19 ноября 2010

Подобный вопрос ранее задавался: текст ссылки

В основном хочу проверить

(Len(s) = 5) And IsNumeric(s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...