2014-01-09 40 views
-1

我是VBA的新手,正在製作一個宏,它可以幫助我將通話記錄轉換爲有用的分析內容。VBA轉換和合並日期和時間

列E包含格式爲YYYYMMDD的調用日期。我需要轉換爲MM/DD/YYYY。 (即20140101轉換爲1/1/2014)

列F包含格式化爲HHMMSS或HMMSS的呼叫時間,取決於小時是兩位還是一位。我需要轉換爲HH:MM:SS(即分別需要轉換爲13:01:01和9:01:01的130101或90101)。因爲如果數值小於10,那麼小時數就會丟失數十位數,(下圖)我在數值的開頭添加了一個「0」,所以我可以使用日期函數。

我目前輸入在k列的下式和自動填充,直到範圍的結束:

= DATE(LEFT(E2,4),MID(E2,5,2),RIGHT( (F2(F2)= 5,&F2,F2),3,2,2, ),RIGHT(IF(LEN(F2)= 5,0 & F2,F2),2))

該公式的結果,如 「2013年1月1日13時01分01秒」 的值。

有人可以幫我寫VBA代碼來自動化這個過程嗎?

謝謝。

回答

2

爲此創建單獨的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兩者的結合。

截圖:

enter image description here

讓我們知道這會有所幫助。

編輯:

如果你想使用它的子程序中,下面的代碼添加到模塊:

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 

希望這有助於。

+0

非常感謝!這很好。作爲後續工作,如果我想將其納入Sub例程,我該如何做?日期的範圍是E2直到結束,時間是F2直到結束。 – blahblahblah

+0

@ bfs1990:檢查更新的代碼。 :) – Manhattan

+0

完美!再次感謝你的幫助。我在學習很多! – blahblahblah