VBA 转换和组合日期和时间

bla*_*lah 1 excel vba

我是 VBA 新手,正在使用一个宏来帮助我将呼叫记录转换为对分析有用的内容。

E 列包含格式为 YYYYMMDD 的呼叫日期。我需要转换为 MM/DD/YYYY。(即 20140101 转换为 1/1/2014)

F 列包含呼叫时间,其格式取决于小时是两位数还是一位数,其格式为 HHMMSS 或 HMMSS。我需要转换为 HH:MM:SS(即 130101 或 90101,需要分别转换为 13:01:01 和 9:01:01)。因为如果值低于十,小时将缺少十位数字,(下图)我在值的开头添加了一个“0”,以便我可以使用日期函数。

我目前在 K 列中输入以下公式并自动填充直到范围结束:

=日期(左(E2,4),中(E2,5,2),右(E2,2))+时间(左(IF(LEN(F2)=5, 0&F2, F2),2),MID( IF(LEN(F2)=5, 0&F2, F2),3,2),RIGHT(IF(LEN(F2)=5, 0&F2, F2),2))

该公式产生类似“1/1/2013 13:01:01”的值。

有人可以帮我编写 VBA 代码来自动化这个过程吗?

谢谢你。

Jer*_*ino 6

为此创建了单独的 UDF。将以下内容粘贴到模块中。

Function MorphDate(DateRng As Range)

    Dim DateStr As String: DateStr = DateRng.Value
    Dim Yr As String, Mt As String, Dy As String

    Yr = Left(DateStr, 4)
    Mt = Mid(DateStr, 5, 2)
    Dy = Right(DateStr, 2)

    MorphDate = Format(DateSerial(Yr, Mt, Dy), "m/dd/yyyy")

End Function

Function MorphTime(TimeRng As Range)

    Dim TimeStr As String: TimeStr = TimeRng.Value
    Dim Hh As String, Mm As String, Ss As String

    If Len(TimeStr) = 5 Then TimeStr = "0" & TimeStr

    Hh = Left(TimeStr, 2)
    Mm = Mid(TimeStr, 3, 2)
    Ss = Right(TimeStr, 2)

    MorphTime = Format(TimeSerial(Hh, Mm, Ss), "hh:mm:ss")
End Function

Function MorphDateTime(DateRng As Range, TimeRng As Range)

    Application.Volatile
    MorphDateTime = CDate(MorphDate(DateRng)) + CDate(MorphTime(TimeRng))

End Function
Run Code Online (Sandbox Code Playgroud)

现在您可以使用公式MorphDate来更改日期、MorphTime更改时间以及MorphDateTime两者的组合。

截屏:

在此处输入图片说明

如果这有帮助,请告诉我们。

编辑:

如果要在子例程中使用它,请将以下代码添加到模块中:

Sub MorphingTime()

    Dim DateRng As Range, Cell As Range
    Set DateRng = Range("E2:E100") '--Modify as needed.

    For Each Cell in DateRng
        Range("K" & Cell.Row).Value = MorphDateTime(Cell, Cell.Offset(0,1))
    Next Cell

End Sub
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。