我是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”,所以我可以使用日期函数。
我目前在K列中输入以下公式并自动填充,直到范围结束:
= DATE(左(E2,4),MID(E2,5,2),右(E2,2))+ TIME(左(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代码来自动化这个过程吗?
谢谢。
答案 0 :(得分:4)
为此创建单独的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
希望这有帮助。