VBA, как найти все число в строке и установить переменную - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть список, который был скопирован со страницы «Содержание» в столбец D. К сожалению, каждая ячейка содержит номер главы, название главы и номер страницы.

3.14.4 placeholder.140

Иногда между номером страницы и последним символом есть пробел. в других случаях это не так.

Я пытался

Function john(txt As String) As Long
Dim x
x = Split(Trim(txt), Chr(32))
john = Val(x(UBound(x)))
End Function

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

Private Sub FIND_LAST_NUMBER()

Dim A As String
Dim B As Integer
Dim C As String
Dim D As String

x = 3

Do While ActiveSheet.Cells(x, 4).Value <> ""

A = Range("D" & x).Value
A = Trim(A)
B = Len(A)
For Position = B To 1 Step -1
    C = Mid(A, Position, 1)
    'MsgBox C
    If C <> " " Then
        D = Right(A, B - Position)
        Range("E" & x).Value = C
    GoTo LastLine
  'Exit Sub
End If
Next Position

LastLine:
    x = x + 1

Loop

End Sub 

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

Я, очевидно, что-то здесь не получаю.

Любые советы или рекомендации будут высоко оценены

1 Ответ

0 голосов
/ 06 ноября 2019

Одно, по общему признанию, не очень красивое решение, о котором я могу сразу подумать, это использовать Replace для удаления всех нечисловых символов.

Dim str As String

str = Replace(str, " ", "") '<- to remove the random spaces
str = LCase(str) '<- making everything lower case

For i = 97 To 122
    str = Replace(str, Chr(i), "")
Next i

Chr(i) при i от 97 до 122 будетбыть каждым символом стандартного алфавита. Это не работает, если в строке имени главы появляются специальные символы. Если имя главы содержит числа, они останутся, но вы можете обнаружить этот случай, потому что UBound массива разбиения будет на 1 больше обычного.

Также, если вы можете быстро сканировать все ячейки с вашими данными длядругие нежелательные символы, такие как - / или что бы то ни было, вы также можете избавиться от них с помощью Replace

Производительность этого решения может быть не очень хорошей, но для быстрого исправления может подойти ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...