我正在使用Excels 2013 mid和搜索功能从评论栏中获取日期,但我不知道如何执行此操作以涵盖8种日期格式(dd / mm / yyyy,dd / mm / yy等等)。我的三个公式在下面,虽然我需要将它们全部加在一起以捕获所有日期格式。评论栏可以是任何日期内任何位置的文本。
=MID(A6, SEARCH("??/??/????", A6, 1), 10)
=MID(A7, SEARCH("?/??/????", A7, 1), 9)
=MID(A8, SEARCH("??/?/????", A8, 1), 9)
必须有更好的方法来做到这一点,因为我能想到的唯一方法是将每个公式放在一个单独的列上,然后使用if语句来显示日期。 任何帮助都会非常感激。感谢
示例列数据
Paid on 01/01/2017
Paid on 1/01/2017, Reference AAA123
Reference BBB456 Paid on 01/1/2017
答案 0 :(得分:4)
如果字符串中的日期之前没有其他数字,则此数组公式有效:
=INDEX(--TRIM(CLEAN(MID(SUBSTITUTE(SUBSTITUTE(A1," ",REPT(" ",999)),",",""),(ROW(INDIRECT("1:" & LEN(A1)-LEN(SUBSTITUTE(A1," ",""))+1))-1)*999+1,999))),MATCH(TRUE,ISNUMBER(--TRIM(CLEAN(MID(SUBSTITUTE(SUBSTITUTE(A1," ",REPT(" ",999)),",",""),(ROW(INDIRECT("1:" & LEN(A1)-LEN(SUBSTITUTE(A1," ",""))+1))-1)*999+1,999)))),0))
作为一个数组公式,需要在退出编辑模式时使用Ctrl-Shift-Enter而不是Enter来确认。
它按空格解析字符串,并遍历每个"字"直到它找到第一个可以转换为数字的日期。
这将要求将输出格式化为所需的日期格式。
答案 1 :(得分:0)
这是正则表达式的用法。
这是一个实现正则表达式的函数,如下所示:How to use Regular Expressions (Regex) in Microsoft Excel both in-cell and loops
(请注意,您必须添加" Microsoft VBScript正则表达式5.5"参考,如链接中所述)
Function showDate(thisVal As String)
Dim strPattern As String
Dim regEx As New RegExp
strPattern = "[0-9]?[0-9]/[0-9]?[0-9]/[0-9]?[0-9]?[0-9][0-9]"
If strPattern <> "" Then
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
Set objMatches = regEx.Execute(thisVal)
For Each Match In objMatches 'The variable match will contain the full match
showDate = Match
Next
End If
End Function
使用它:=showDate(A1)
代码:
strPattern = "[0-9]?[0-9]/[0-9]?[0-9]/[0-9]?[0-9]?[0-9][0-9]"
控制要查找的模式。每个?
范围后的[0-9]
表示&#34;可选&#34;如果存在,则可以接受月中的前导零或一个,但缺少它不会导致匹配/发现错过。
请注意,此解决方案提供字符串中日期的最后一个实例。如果您只有一个日期实例,那么每个字符串的多个日期是您必须考虑的范围。