Excel搜索日期格式

时间:2017-11-14 18:25:12

标签: excel excel-formula

我正在使用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

2 个答案:

答案 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来确认。

它按空格解析字符串,并遍历每个"字"直到它找到第一个可以转换为数字的日期。

这将要求将输出格式化为所需的日期格式。

enter image description here

答案 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;如果存在,则可以接受月中的前导零或一个,但缺少它不会导致匹配/发现错过。

请注意,此解决方案提供字符串中日期的最后一个实例。如果您只有一个日期实例,那么每个字符串的多个日期是您必须考虑的范围。