另一个公式解决方案。
有人知道我从Excel的单元格中提取子字符串的最佳方法是什么吗?
我在excel中有成千上万的行,其中在随机文本中有类似“ 31.12.2019-30.12.2020”的句点,我需要从每一行中提取此子字符串并将其放在单独的单元格中。子字符串始终具有相同的模式,但是文本本身始终是不同的,并且可以在文本内的任何位置。
也许可以通过公式或通过VBA来准确识别以下模式:“ XX.XX.20XX-XX.XX.20XX”,然后返回子字符串?但是我找不到通过谷歌搜索的公式,但是也许你们中的任何一个以前都做过?
最好的问候AnSa
[1)-Excel公式
如果您使用Excel公式路线,请在B2
中使用:
=MID(A2,SEARCH("??.??.20??-??.??.20??",A2),21)
拖动...
SEARCH
函数确实支持通配符,例如?
(代表任何字符),因此返回感兴趣的子字符串的起始位置。当在MID
中使用时,我们实际上可以提取此子字符串。
2)-VBA
根据我上面的评论,这也可以通过正则表达式巧妙地完成(请参阅@Warcupine提供的链接)。正则表达式使您可以更精确地使用样式(例如,我们可以搜索数字而不是任何字符)。
我可以想象您会使用一个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")
中称呼它>>
您可以看到该模式非常简单:
结果:
] >>另一个公式解决方案。
在B1
中,公式向下复制:
=MID(A2,FIND("-",A2)-10,21)
另一个公式解决方案。