Excel VBA 查找,用字符串中的日期替换纪元时间戳

Excel VBA to find, replace epoch timestamp with date in string

并提前感谢您提供的任何帮助。几天来我一直在用户论坛上转来转去,完全被难住了。 (此外,我是一个新手,几乎不会拼写“VBA”,但我正在努力!)

我有一个 Excel 电子表格,其中包含用户评论的单元格。每条评论前面都有一个 10 位的纪元时间戳。单元格如下所示:

<[1486481641]>-User 1: I like pie. <[1486489862]>-User 2: I like cake. <[1486490937]>-User 1: Pie is better than cake.

我想要一个宏来查找每个单元格中的所有纪元时间戳并将它们替换为人类可读的日期和时间。

我有一个函数可以将纪元字符串转换为 Excel 时间(但时间戳必须是单元格中的唯一数据,并且它将 date/time 放在相邻的单元格中)和另一个找到正则表达式字符串并将其替换为其他内容的宏。我不知道如何组合它们。

我的纪元转换函数如下所示:

Function ux2pst(uts)
ux2pst = Format(DateAdd("s", uts, "12/31/1969 16:00:00"), "MM/DD/YYYY HH:MM")
End Function

我的正则表达式 find/replace 应该是这样的,但我不知道如何在 regEx.Replace 语句中包含转换代码:

Sub replaceEpoch()
Dim regEx As Object
Dim r As Range, rT As Range

Set r = Range("B2", Cells(Rows.Count, "B").End(xlUp))

Set regEx = CreateObject("VBScript.RegExp")
regEx.Pattern = "\d{10}"
regEx.Global = True

For Each rT In r
    If rT.Value <> "" Then rT.Value = regEx.Replace(rT.Value, "CONVERTED DATE-TIME??")
Next rT
    
End Sub

我尝试过一些不同的东西,但都以惊人的失败告终。谁能指出我正确的方向?再次感谢。

您需要遍历正则表达式找到的epoch次的所有匹配项,将它们传递给ux2pst函数并用结果替换它们。

Option Explicit

Sub replaceEpoch()
Dim regEx As Object
Dim r As Range, rT As Range
Dim mtch As Object

    Set r = Range("B2", Cells(Rows.Count, "B").End(xlUp))

    Set regEx = CreateObject("VBScript.RegExp")
    regEx.Pattern = "\d{10}"
    regEx.Global = True

    For Each rT In r
        If rT.Value <> "" Then
            For Each mtch In regEx.Execute(rT.Value)
                rT.Value = Replace(rT.Value, mtch, ux2pst(mtch))
            Next mtch
        End If
    Next rT

End Sub

Function ux2pst(uts)
    ux2pst = Format(DateAdd("s", uts, "12/31/1969 16:00:00"), "MM/DD/YYYY HH:MM")
End Function