簡體   English   中英

VBA轉換並合並日期和時間

[英]VBA Convert and combine date and time

我是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))

該公式的結果類似於“ 1/1/2013 13:01:01”。

有人可以幫我編寫VBA代碼來自動執行此過程嗎?

謝謝。

為此創建了單獨的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

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM