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 

一个快速的方法你可以使用下面的代码来

  1. DateLastModified中的某个文件夹中的所有文件读入到一个数组中
  2. 在临时工作表中转储和sorting数组
  3. 存储sorting的数组(在下面的variablesY中)

 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年的公元,但这并没有什么区别,最终的结果是两位数的年份。