date格式dd:mm:yy:hh:mm:ss到dd / mm / yh h:mm:ss
我想使用VBA将格式为dd:mm:yy:hh:mm:ss
的文件中存储的date转换为可用于在Excel中使用VBA进行sorting的文件。 我找不到任何紧凑的东西。 我已经尝试了文本到列,然后将分离出来的值重新组合到一个date和时间,但这对于大数据文件来说很麻烦而且很慢。
任何人都知道一个可以使用的快速方法??
也许这个将范围A1:A10
:
[A1:A10]=[IF({1},TEXT(SUBSTITUTE(A1:A10,":",""),"00\/00\/00 00\:00\:00"))]
以下情况如何
Option Explicit Sub test() Dim dtStr As String Dim dtArr() As String Dim rebuildDt As String Dim dtDte As Date Dim dtStr2 As String dtStr = "29:08:12:23:37:04" dtArr = Split(dtStr, ":") rebuildDt = dtArr(0) & "/" & dtArr(1) & "/" & dtArr(2) _ & " " & dtArr(3) & ":" & dtArr(4) & ":" & dtArr(5) dtDte = CDate(rebuildDt) dtStr2 = Format(dtDte, "dd/mm/yy hh:mm:ss") Debug.Print dtStr2 End Sub
一个快速的方法你可以使用下面的代码来
- 将
DateLastModified
中的某个文件夹中的所有文件读入到一个数组中 - 在临时工作表中转储和sorting数组
- 存储sorting的数组(在下面的variables
Y
中)
码
Sub GetFiles() Dim objFSO As Object Dim objFolder As Object Dim objFile As Object Dim strFolder As String Dim strFileName As String Dim lngCnt As Long Dim X() Dim Y Dim ws As Worksheet With Application .ScreenUpdating = False .DisplayAlerts = False .EnableEvents = False End With strFolder = "c:\temp" strFileName = Dir(strFolder & "\*.*") Set objFSO = CreateObject("scripting.filesystemobject") Set objFolder = objFSO.getfolder(strFolder) ReDim X(1 To objFolder.Files.Count, 1 To 2) For Each objFile In objFolder.Files lngCnt = lngCnt + 1 X(lngCnt, 1) = objFile.Name X(lngCnt, 2) = objFile.datelastmodified Next Set ws = Sheets.Add ws.[a1].Resize(UBound(X, 1), 2) = X ws.Range("A:B").Sort ws.Range("B1"), xlDescending Y = ws.[a1].Resize(UBound(X, 1), 2) ws.Delete With Application .ScreenUpdating = True .DisplayAlerts = True .EnableEvents = True End With End Sub
一个只使用Excel公式的方法,没有VBA
=DATE(2000+MID(A1,7,2),MID(A1,4,2),LEFT(A1,2))+TIMEVALUE(RIGHT(A1,8))
我认为,例如,凌晨1点表示为01:00:00,也就是说,在任何地方都不会读取零,每个元素总是两个字符。
你可以使用split
函数并parsing出string,因为你会(假设这里)有dd:mm:yy:hh:mm:ss
所以前三个是date,最后三个是时间。
这是一个简单的VBAfunction:
Function ConvertDateFormat(dateInOldFormat As String) Dim d As Date Dim ss() As String ss = Split(dateInOldFormat, ":") d = DateSerial(CInt(ss(2)), CInt(ss(1)), CInt(ss(0))) _ + TimeSerial(CInt(ss(3)), CInt(ss(4)), CInt(ss(5))) ConvertDateFormat = Format(d, "dd/mm/yy hh:mm:ss") End Function
用法:
s = ConvertDateFormat("30:08:12:08:52:11") 'returns "30/08/12 08:52:11"
在这里,我甚至不会考虑处理千年虫问题…在这个函数的内部,我假设一年“12”意味着12年的公元,但这并没有什么区别,最终的结果是两位数的年份。