我如何从Excel中的单元格提取只有5位数string?

我有一堆数据,其中包含任意数量的5位string,格式完全不一致,我想提取这些5位string(粗体)。 我对包含less于或多于5位的string不感兴趣。 作为一个例子,这是我在我的文件中的数据types

细胞A1:“1. 76589 – 批发活动2. 33476 – 一般”

细胞A2:“ 批发活动( 76589 )。运输( 12235 )。房地产活动( 67333 )”

单元格A3:“1. 33476一般。658709年度道路。未知563”

我已经尝试了通常的SEARCH/FINDMINLEFT/RIGHT/MID函数,但是不知道如何让它们产生我需要的结果,甚至文本到列也没有给我一个清晰的结果

提前致谢

这是一个macros,可以按照你的要求将你的行分割成列。

正在处理的范围是你select的任何东西。 结果写入同一行的相邻列。

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

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


 Option Explicit Sub Extract5Digits() Dim R As Range, C As Range Dim RE As Object, MC As Object, M As Object Dim I As Long Set R = Selection Set RE = CreateObject("vbscript.regexp") With RE .Global = True .Pattern = "\b\d{5}\b" For Each C In R If .test(C.Text) = True Then I = 0 Set MC = .Execute(C.Text) For Each M In MC I = I + 1 C.Offset(0, I) = M Next M End If Next C End With End Sub 

在这里输入图像说明

简单地用Excelfunction,这是不可能的。

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

我们来考虑一下这个例子:

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

从Excel文件中按Alt + F11 ,然后进入工具=>参考并select“ Microsoft VBScript正则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中。

当时我不知道这个代码如何在同一个单元格包含多次的情况下工作; 像“ 单元格A1:”1。 76589 – 批发活动。 2. 33476 – 一般 “在你的例子。

我build议你看看这个答案 。 模式是不同的,但问题是真的类似于你的。

唯一的办法就是在VBA中编写一个正则expression式。 我会build议你看看这个问题 。