我有一个注释字段,其中的单元格包含如下文字:
Cancelled by user at 2018-01-03 03:11:57 without charge
我想获取日期和时间信息,但它可能并不总是在最后一个空格的第3 /第4位,否则我可能会尝试对单元格进行某种复杂的分割。在小区中是否有""方式提取日期时间信息?或者这需要一个VBA脚本吗?我更喜欢前者,但无论如何我都试图制作一个宏来简化我的生活,所以VBA也会工作。
答案 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
正则表达式说明:
\d{4}
- 匹配代表年份的4位数字(?:-\d{2}){2}
- 匹配-
后跟2位数字。 {2}
最后重复这场比赛2次。获取MM
后,DD
\s*
- 匹配0+空格以匹配日期和时间之间的空格\d{2}
- 匹配代表HH
(?::\d{2}){2}
- 匹配:
后跟2位数字。最后{2}
重复此次匹配2次。第一次匹配:MM
和下次匹配:SS
<强>截图:强>
<强>输出:强>
答案 3 :(得分:2)
我建议采用以下公式:
=MID(A1,FIND("at 20",A1)+3,19)
这将要求日期始终以“at”开头,日期字符串以20开头。
答案 4 :(得分:1)