从包含多个日期和文本字符的文本字符串中提取日期和时间

从包含多个日期和文本字符的文本字符串中提取日期和时间

2 个问题

我如何从这个单元格中获取较早的日期,例如,我将所有这些笔记都放在一个单元格中

2020-04-07 17:35:43 - 标记质量检查完成:按要求创建
SNOW ID =Csdsd 注释:申请数据已注册 2020-04-03 12:13:45 - 标记 ~ 注释:质量检查

问题是我想要获得 2020-04-03 12:13:45 仅在单元格的最低部分我该怎么做?

还有第二个问题,如果我在一个单元格中只有这个怎么办

2020-04-03 12:13:45 - Mark ~ 备注:质量检查

我只想获取日期和时间 2020-04-03 12:13:45

请帮忙

答案1

假设您的日期/时间始终采用显示的格式(并且字符串中没有其他具有相同格式的内容),如果您有O365通过该SEQUENCE函数,您可以使用以下公式:

=MIN(--MID(A1,AGGREGATE(15,6,SEARCH("????-??-?? ??:??:??",MID(A1,SEQUENCE(255),19))*SEQUENCE(255),ROW(INDEX($A:$A,1,1):INDEX($A:$A,SUM(--ISNUMBER(SEARCH("????-??-?? ??:??:??",MID(A1,SEQUENCE(255),19)))),1))),19))

如果你没有该SEQUENCE功能,你可以使用:

=MIN(--MID(A1,AGGREGATE(15,6,SEARCH("????-??-?? ??:??:??",MID(A1,ROW(INDEX($A:$A,1,1):INDEX($A:$A,255,1)),19))*ROW(INDEX($A:$A,1,1):INDEX($A:$A,255,1)),ROW(INDEX($A:$A,1,1):INDEX($A:$A,SUM(--ISNUMBER(SEARCH("????-??-?? ??:??:??",MID(A1,ROW(INDEX($A:$A,1,1):INDEX($A:$A,255,1)),19)))),1))),19))

无论字符串中有多少个日期,公式都应该有效

在此处输入图片描述

笔记: 如果您的字符串可能超过 255 个字符,请相应地更改ROW(INDEX(…SEQUENCE(…函数中的因子。(或将其替换为LEN(A1)

笔记2:早期版本的 Excel 可能要求将其输入为大批公式,按住ctrl+shift并点击enter

答案2

这是你的第二问题。这个小 UDF 将扫描字符串并检索第一个例子您需要的格式的日期/时间:

Public Function GrabDate(s As String) As String
    Dim L As Long, i As Long, subS As String
    Dim pattrn As String

    pattrn = "####[-]##[-]##[ ]##[:]##[:]##"
    L = Len(s)

    For i = 1 To L
        subS = Mid(s, i, 19)
        If subS Like pattrn Then
            GrabDate = subS
            Exit Function
        End If
    Next i

    GrabDate = ""
End Function

在此处输入图片描述

您也许可以修改它来解决您的第一个问题。

相关内容