Попытка извлечь 6 или 5-значное число из строки - PullRequest
0 голосов
/ 06 апреля 2019

Я пытаюсь извлечь 5- или 6-значный код из строки.

C: \ Users \ pthaxthon \ Desktop \ 45697_Originals

C: \ Users \ pthaxthon \ Desktop \ 123456_Originals

Мне просто нужно 5 или 6-значное число

Номер всегда появляется после 4-го тире и до первого _

Я пытался использовать команду mid и split, нобезуспешно

Range("D14").Value = Mid(fle, 28, 6) 

Мне просто нужно 5 или 6-значное число

Ответы [ 3 ]

1 голос
/ 06 апреля 2019

Другим решением было бы полагаться на «число всегда появляется после 4-го тире и до первого _». Тогда вы можете использовать split следующим образом

Option Explicit

Function GetNo(s As String) As String

    Const BSLASH = "\"
    Const UNDERSCORE = "_"
    Const FOUR = 4
    Dim v As Variant

    ' Split the string by backslash
    v = Split(s, BSLASH)
    ' Take always the fourth entry and split it by underscore
    v = Split(v(FOUR), UNDERSCORE)
    ' take string before the underscore
    GetNo = v(0)

End Function

Sub TestIt()
Dim inp As String
    inp = "C:\Users\pthaxthon\Desktop\123456_Originals"
    inp = "C:\Users\pthaxthon\Desktop\45697_Originals"
    Debug.Print GetNo(inp)
End Sub
1 голос
/ 06 апреля 2019

Вы также можете использовать регулярное выражение, чтобы вытащить число.

    Set SDI = CreateObject("VBScript.RegExp")
    SDI.Pattern = "\d+"  '* keep the number only
    Set Num_out = SDI.Execute(Str_In)
    Criteria_out = Val(Num_out(0))
1 голос
/ 06 апреля 2019

Поскольку число всегда находится между 28-й цифрой и последующим символом "_", вы можете перейти;

Range("D14").Value = Split(Mid(fle, 28), "_")(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...