尝试从字符串中提取6或5位数字

时间:2019-04-06 01:33:06

标签: excel vba

我正在尝试从字符串中提取5或6位数字的代码。

C:\ Users \ pthaxthon \ Desktop \ 45697_Originals

C:\ Users \ pthaxthon \ Desktop \ 123456_Originals

我只需要5或6位数字

数字始终出现在第四个破折号之后和第一个_

之前

我尝试使用mid和split命令,但没有成功

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

我只需要5或6位数字

3 个答案:

答案 0 :(得分:1)

由于数字始终在第28位和后面的“ _”字符之间,因此可以继续;

Range("D14").Value = Split(Mid(fle, 28), "_")(0)

答案 1 :(得分:1)

另一个解决方案是依靠“数字总是出现在第四个破折号之后和第一个_之前”。然后您可以按以下方式使用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

答案 2 :(得分:1)

您还可以使用正则表达式提取数字。

    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))