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

Posted

技术标签:

【中文标题】Excel VBA查找,用字符串中的日期替换纪元时间戳【英文标题】:Excel VBA to find, replace epoch timestamp with date in string 【发布时间】:2021-11-07 03:27:27 【问题描述】:

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

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

-用户1:我喜欢馅饼。 -用户2:我喜欢 蛋糕。 -用户1:派比蛋糕好。

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

我有一个函数可以将一个纪元字符串转换为 Excel 时间(但时间戳必须是单元格中的唯一数据,并且它将日期/时间放在相邻的单元格中)和另一个查找 regEx 字符串的宏并用其他东西代替它。我不知道如何组合它们。

我的历元转换函数是这样的:

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

我的正则表达式查找/替换应该是这样的,但我不知道如何在 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 = "\d10"
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

我尝试了一些不同的方法,但都失败了。谁能指出我正确的方向?再次感谢。

【问题讨论】:

【参考方案1】:

您需要遍历正则表达式找到的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 = "\d10"
    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

【讨论】:

以上是关于Excel VBA查找,用字符串中的日期替换纪元时间戳的主要内容,如果未能解决你的问题,请参考以下文章

Excel 怎么用VBA代码快速查找替换指定字符

用excel中的VBA,然后根据excel中单元格中内容,批量替换一个word的模板doc中的字符。字符有很多处。

excle vba,如何查找一个已知值的行号和列号?

基于Excel中数据库的VBA在word中查找和替换

Excel vba替换双引号怎么写?

VBA Word 从 Excel 中查找和替换 /&-