Excel VBA转换并合并日期和时间

Excel VBA转换并合并日期和时间,excel,vba,Excel,Vba,我是VBA新手,正在使用一个宏来帮助我将通话记录转换为有用的分析工具 列E包含格式为YYYYMMDD的调用日期。我需要转换为MM/DD/YYYY。(即20140101转换为2014年1月1日) F列包含呼叫时间,其格式为HHMMSS或HMMSS,具体取决于小时是两位数还是一位数。我需要转换为HH:MM:SS(即130101或90101,分别需要转换为13:01:01和9:01:01)。因为如果值小于10,则小时缺少十位数字,因此我在值的开头添加了一个“0”,以便使用date函数 我目前在K列中输

我是VBA新手,正在使用一个宏来帮助我将通话记录转换为有用的分析工具

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

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

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

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

公式得出的值类似于“1/1/2013 13:01:01”

有人能帮我写VBA代码来自动化这个过程吗


谢谢。

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

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
现在,您可以使用公式
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

希望这有帮助。

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

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
现在,您可以使用公式
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

希望这有帮助。

非常感谢!这很有效。作为后续行动,如果我想将其纳入子例程,我将如何做?日期的范围是E2到结束,时间是F2到结束。非常感谢!这很有效。作为后续行动,如果我想将其纳入子例程,我将如何做?截止日期的范围为E2,截止日期的时间范围为F2。