【问题标题】:VBA Convert and combine date and timeVBA 转换和组合日期和时间
【发布时间】:2014-01-09 04:08:19
【问题描述】:

我是 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 列中输入以下公式并自动填充,直到范围结束:

=DATE(LEFT(E2,4),MID(E2,5,2),RIGHT(E2,2))+TIME(LEFT(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))

公式得出的值类似于“2013 年 1 月 1 日 13:01:01”。

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

谢谢。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    为此创建了单独的 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
    

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

    希望这会有所帮助。

    【讨论】:

    • 非常感谢!这很好用。作为后续,如果我想将其合并到 Sub 例程中,我该怎么做? Date 的范围是 E2 直到结束,Time 的范围是 F2 直到结束。
    猜你喜欢
    • 2018-03-05
    • 1970-01-01
    • 2012-05-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多