Следующее будет возвращать любое заданное количество цифр от начала строки:
Function LeadingDigits(text As String, maxDigits As Integer) As String
Dim pos As Integer, c As String
Do Until pos >= maxDigits Or pos >= Len(text)
c = Mid$(text, pos + 1, 1)
If c < "0" Or c > "9" Then Exit Do
pos = pos + 1
Loop
LeadingDigits = Mid$(text, 1, pos)
End Function
В отличие от решений, использующих IsNumeric()
или Val()
, эта функция не путается со строками которые могут быть интерпретированы как цифры c, но не попадают в спецификацию, например
- шестнадцатеричный (
"&habc"
= 2748
) - scientifi c нотация (
"3e4"
= 30000
) +
/ -
знаки в начале строки - десятичные числа
".5"
= 0.5
Принимаются только десятичные цифры 0
- 9
в начале строки.
Функция возвращает строку, а не тип цифры c (например, Integer
), так что может быть отдельное возвращаемое значение для «ничего не найдено» (пустая строка), и поэтому могут быть возвращены очень длинные числа, которые не вписываются в тип данных нумерации c.