[英]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.