【问题标题】:VBA code for extracting 3 specific number patterns用于提取 3 个特定数字模式的 VBA 代码
【发布时间】:2014-04-17 05:18:04
【问题描述】:

我在 excel 中工作,需要 VBA 代码来提取 3 个特定的数字模式。在 A 列中,我有几行字符串,其中包括字母字符、数字和标点符号。我需要删除除 13 位数字(仅包含数字)、10 位数字(仅包含数字)或紧跟“x”字符的 9 位数字之外的所有字符。这些是 isbn 数字。

剩余的字符应该用一个空格分隔,并且只有一个空格。因此,对于在 A1 中找到的以下字符串:“这里有几本书,包括 0192145789 和 9781245687456。此外,还包括 isbn 045789541x 的书。这本书是 100000000 册之一。”

输出应该是:0192145789 9781245687456 045789541x

请注意,数字 100000000 不应包含在输出中,因为它与上述三种模式中的任何一种都不匹配。

与 VBA 相比,我不反对 Excel 公式解决方案,但我认为 VBA 会更简洁。提前致谢。

【问题讨论】:

  • 使用空格作为分隔符拆分字符串,然后仅连接以数字开头的段。
  • 如果你想要正则表达式,请查看post,它概述了在 VBA 中使用正则表达式的几种方法。

标签: regex excel vba extract


【解决方案1】:

这是一个 VBA 函数,它将专门执行您指定的操作

    Function ExtractNumbers(inputStr As String) As String

    Dim outputStr As String
    Dim bNumDetected As Boolean
    Dim numCount As Integer
    Dim numStart As Integer

    numCount = 0
    bNumDetected = False

    For i = 1 To Len(inputStr)
        If IsNumeric(Mid(inputStr, i, 1)) Then
            numCount = numCount + 1
            If Not bNumDetected Then
                bNumDetected = True
                bNumStart = i
            End If

            If (numCount = 9 And Mid(inputStr, i + 1, 1) = "x") Or _
                numCount = 13 And Not IsNumeric(Mid(inputStr, i + 1, 1)) Or _
                numCount = 10 And Not IsNumeric(Mid(inputStr, i + 1, 1)) Then

                    If numCount = 9 Then
                        outputStr = outputStr & Mid(inputStr, bNumStart, numCount) & "x "
                    Else
                        outputStr = outputStr & Mid(inputStr, bNumStart, numCount) & " "
                    End If

            End If
        Else
            numCount = 0
            bNumDetected = False
        End If

    Next i

    ExtractNumbers = Trim(outputStr)

End Function

这没什么特别的,只是使用字符串函数一次一个字符地遍历您的字符串,查找以 x 结尾的 9 位数字、10 位数字和 13 位数字的部分,并将它们提取到一个新字符串中。

这是一个 UDF,因此您可以将其用作工作簿中的公式

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-16
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多