如何从excel中的单元格中仅提取5位数字符串?

时间:2017-04-27 10:42:09

标签: regex excel string vba extract

我有一堆数据包含完全不一致格式的任意数量的5位数字符串,我想提取这些5位数字符串(粗体)。对于包含少于或超过5位数的字符串,我并不感到烦恼。例如,这是我文件中的数据

  

Cell A1:" 1。 76589 - 批发活动。 2. 33476 - 一般"

     

细胞A2:"批发活动( 76589 )。运送( 12235 )。真实   房地产活动( 67333 )"

     

细胞A3:" 1。 33476 将军。 658709年度道路。未知563"

我已尝试过常用的SEARCH/FINDMINLEFT/RIGHT/MID函数,但我不确定如何让它们生成我需要的结果,甚至是文本到-columns并没有给我一个干净的结果

提前致谢

3 个答案:

答案 0 :(得分:2)

这是一个宏,可以根据您的要求将您的行拆分为列。

正在处理的范围是您选择的任何内容。 结果将写入同一行的相邻列中。

根据您的工作表设置,您可能希望在执行提取代码之前“清除”结果所在的行。

您还可以编写代码来选择要自动处理的数据。这个论坛上有很多例子。

.circle

enter image description here

答案 1 :(得分:0)

只需使用Excel功能,这是不可能的。

最好的方法是在VBA中使用Regex 55库。

让我们考虑这个例子:

+---+--------------------------------------------------------------+
|   |                              A                               |
+---+--------------------------------------------------------------+
| 1 | Cell A3: "1. 33476 General. 658709 annual road. Unknown 563" |
| 2 | 33476                                                        |
+---+--------------------------------------------------------------+

从Excel文件点击 Alt + F11 ,然后转到Tools =>参考并选择“ Microsoft VBScript Regular Expression 5.5 ”。

然后您可以使用以下函数定义:

Public Function Get5DigitsNumer(search_str As String)
Dim regEx As New VBScript_RegExp_55.RegExp
Dim matches
    GetStringInParens = ""
    regEx.Pattern = "[0-9]{5}"
    regEx.Global = True
    If regEx.test(search_str) Then
        Set matches = regEx.Execute(search_str)
        GetStringInParens = matches(0).SubMatches(0)
    End If
End Function

此时您可以使用以下代码:

Sub PatternExtractor()
    Range("A2").Value = Get5DigitsNumer(Range("A1"))
End Sub

取单元格A1的值并提取5位数字,结果保存到单元格A2中。

当时我不知道这个代码在同一个单元格包含多个时间的情况下如何工作;比如“ Cell A1:”1。 76589 - 批发活动。 2. 33476 - 一般“在您的示例中。

我建议你看一下this answer。模式不同,但问题与你的问题非常相似。

答案 2 :(得分:0)

你能做到的唯一方法就是在VBA中编写一个正则表达式。我建议你看一下question