我想使用VBA将格式为dd:mm:yy:hh:mm:ss
的文件中存储的日期转换为可用于使用VBA处理文件的Excel中的排序。我找不到任何紧凑的东西。我已尝试将文本添加到列中,然后将分离出来的值组合回日期和时间,但对于大数据文件来说这很麻烦且速度很慢。
任何人都知道可以使用的快速方法吗?
答案 0 :(得分:2)
也许这可以转换A1:A10
范围内的日期:
[A1:A10]=[IF({1},TEXT(SUBSTITUTE(A1:A10,":",""),"00\/00\/00 00\:00\:00"))]
答案 1 :(得分:1)
以下
怎么样?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
答案 2 :(得分:0)
你可以使用split
函数并解析出字符串,因为你(假设在这里)有dd:mm:yy:hh:mm:ss
所以前三个是日期,后三个是时间。
答案 3 :(得分:0)
快速方法您可以使用以下代码
DateLastModified
读入数组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
答案 4 :(得分:0)
仅使用Excel公式,无VBA
的方法 =DATE(2000+MID(A1,7,2),MID(A1,4,2),LEFT(A1,2))+TIMEVALUE(RIGHT(A1,8))
我认为,例如,1am表示为01:00:00,即不会在任何地方读取零,对于6个元素中的每一个,总是两个字符。
答案 5 :(得分:-1)
这是一个简单的VBA函数:
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"
这里我甚至不打算考虑处理Y2K问题......在这个函数的内部我假设年“12”意味着12 AD,但这对最终结果没有影响无论如何都有两位数的年份。