【问题标题】:Trying to extract a 6 or 5 digit number from a string尝试从字符串中提取 6 或 5 位数字
【发布时间】:2019-04-07 00:22:58
【问题描述】:

我正在尝试从字符串中提取 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 位数字

【问题讨论】:

  • 字符串的第一部分是否始终相同,一直到“\Desktop\”?如果是这样,你会从第 28 位开始,对吧?
  • @DougGlancy 没错
  • 查找/搜索功能将成为您的朋友
  • 查看INSTRREV,如果位置可能发生变化,则从字符串末尾开始查找第一个`\`。

标签: excel vba


【解决方案1】:

另一种解决方案是依靠“数字总是出现在第 4 个破折号之后和第一个 _ 之前”。然后您可以通过以下方式使用拆分

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】:

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

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

    【讨论】:

      【解决方案3】:

      由于数字总是在第 28 位和后面的“_”字符之间,你可以去;

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

      【讨论】:

      • Right 函数从右计数,而不是从左计数。您应该改用 Mid 函数。
      猜你喜欢
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      相关资源
      最近更新 更多