从评论单元格中提取日期/时间

时间:2018-02-15 15:29:10

标签: excel vba excel-vba date excel-formula

我有一个注释字段,其中的单元格包含如下文字:

Cancelled by user at 2018-01-03 03:11:57 without charge

我想获取日期和时间信息,但它可能并不总是在最后一个空格的第3 /第4位,否则我可能会尝试对单元格进行某种复杂的分割。在小区中是否有""方式提取日期时间信息?或者这需要一个VBA脚本吗?我更喜欢前者,但无论如何我都试图制作一个宏来简化我的生活,所以VBA也会工作。

5 个答案:

答案 0 :(得分:2)

您可以尝试此功能。它拆分字符串检查具有第一个字母数字的项目,并构建仅包含日期信息的结果字符串。

Public Function ParseForDate(sCell As String) As String
  Dim vSplit As Variant
  Dim nIndex As Integer
  Dim sResult As String

  vSplit = Split(sCell, " ")
  For nIndex = 0 To UBound(vSplit)
    If IsNumeric(Left$(vSplit(nIndex), 1)) Then
      sResult = sResult & vSplit(nIndex) & " "
    End If
  Next
  ParseForDate = Trim$(sResult)
End Function

如果你想在公式中使用它,它将看起来像这样:

=ParseForDate(A1)

在VBA例程中使用它:

Dim s as String
s = ParseForDate(Range("A1"))

答案 1 :(得分:2)

非VBA解决方案:(假设所有单元格的日期格式始终相同)

= MAX(IFERROR(DATEVALUE(MID(A1,ROW(INDEX($A:$A,1):INDEX($A:$A,LEN(A1)-19)),20)),0))
 +MAX(IFERROR(TIMEVALUE(MID(A1,ROW(INDEX($A:$A,1):INDEX($A:$A,LEN(A1)-19)),20)),0))

请注意,这是一个数组公式,因此您必须按 Ctrl + Shift + Enter 而不是 Enter 输入此公式时。

显然,您需要将单元格格式化为日期和时间,但此公式会获取Excel用于其内部日期和时间系统的数值。

答案 2 :(得分:2)

使用正则表达式可以让您获取日期和时间,无论其在字符串中的位置如何。如果日期和时间与示例字符串中显示的格式相同,则以下解决方案将起作用。

<强>代码:

Sub getDateTime()
    Dim objReg, matches, str
    str = Sheet1.Cells(1, 1).Value                'Change this as per your requirements
    Set objReg = CreateObject("vbscript.regexp")
    objReg.Global = True
    objReg.Pattern = "\d{4}(?:-\d{2}){2}\s*\d{2}(?::\d{2}){2}"
    If objReg.test(str) Then
        Set matches = objReg.Execute(str)
        strResult = matches.Item(0)
        MsgBox strResult
    End If
End Sub

Click for Regex Demo

正则表达式说明:

  • \d{4} - 匹配代表年份的4位数字
  • (?:-\d{2}){2} - 匹配-后跟2位数字。 {2}最后重复这场比赛2次。获取MM后,DD
  • 下次获取
  • \s* - 匹配0+空格以匹配日期和时间之间的空格
  • \d{2} - 匹配代表HH
  • 的2位数字
  • (?::\d{2}){2} - 匹配:后跟2位数字。最后{2}重复此次匹配2次。第一次匹配:MM和下次匹配:SS

<强>截图:

enter image description here

<强>输出:

enter image description here

答案 3 :(得分:2)

我建议采用以下公式:

=MID(A1,FIND("at 20",A1)+3,19)

这将要求日期始终以“at”开头,日期字符串以20开头。

答案 4 :(得分:1)

大约90年(使用单元格 C3

Sub GetDate()
    Dim s As String
    s = Range("C3").Comment.Text
    arr = Split(s, " ")
    For i = LBound(arr) To UBound(arr)
        If Left(arr(i), 2) = "20" Then
            msg = arr(i) & " " & arr(i + 1)
            MsgBox msg
            Exit Sub
        End If
    Next i
End Sub

enter image description here