Чтение только первых 1-2 целых чисел в a для l oop VBA - PullRequest
0 голосов
/ 05 февраля 2020

Как прочитать первые 1-2 целых числа строки в al oop? Мне нужно только разобрать первое или второе целое число. Например, «8sdr» я хочу только проанализировать «8», а затем для «12sdr» я хочу проанализировать «12». Мне нужно, чтобы это было в al oop, чтобы иметь возможность непрерывно анализировать только первые целые числа в строке. Спасибо!

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Следующее будет возвращать любое заданное количество цифр от начала строки:

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.

0 голосов
/ 05 февраля 2020

Если вам нужно до двух цифр перед буквой, я бы использовал RegEx для этого:

Public Function FirstTwoNumbersFromStringBeforeLetter(ByVal textNumbers As String) As Long
    Dim regEx
    Set regEx = CreateObject("vbscript.regexp")
    With regEx
        .Global = True
        .Pattern = "[a-z].*|\D"
        FirstTwoNumbersFromStringBeforeLetter = Left(Val(.Replace(textNumbers, vbNullString)), 2)
    End With
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...