有人知道什么是我在Excel中从单元格中提取子串的最好方法吗?
我有数千行excel中的随机文本,其中有像 "31.12.2019-30.12.2020 "这样的句号,我需要从每行中提取这个子串,并将其放在一个单独的单元格中。子串总是具有相同的模式,但文本本身总是不同的,它可以在文本中的任何地方。
也许可以用一个公式或者通过VBA来准确识别这个模式。"XX.XX.20XX-XX.XX.20XX "然后返回子串? 但我在google上找不到公式,但也许你们中的任何一个人以前做过这个?
最好的祝愿AnSa
1) - Excel公式
如果你走的是Excel公式路线,那么就用在 B2
:
=MID(A2,SEARCH("??.??.20??-??.??.20??",A2),21)
往下拖...
该 SEARCH
函数支持通配符,如 ?
代表任何字符),从而返回感兴趣的子串的起始位置。当在 MID
其实我们可以提取这个子串。
2) - VBA
按照我上面的评论,这也可以通过正则表达式来实现(见 @Warcupine 提供的链接)。正则表达式允许你在模式中更加精确(例如我们可以搜索数字而不是任何字符)。
例如,我可以想象你会使用一个UDF,在这个UDF中,你可以同时链接到文本和你的有效模式。
Public Function RegExtract(Txt As String, Pattern As String) As String
With CreateObject("vbscript.regexp")
'.Global = True
.Pattern = Pattern
If .test(Txt) Then
RegExtract = .Execute(Txt)(0)
Else
RegExtract = "No match found"
End If
End With
End Function
你可以调用这个 B2
通过 =RegExtract(A2,"\d\d\.\d\d\.20\d\d-\d\d\.\d\d\.20\d\d")
如你所见,模式很简单。
结果: