我想使用 VBA 将存储在格式文件中的日期转换dd:mm:yy:hh:mm:ss
为可用于使用 VBA 处理文件的 excel 中排序的日期。我找不到任何紧凑的东西。我已经尝试将文本转换为列,然后将分离出来的值组合回日期和时间,但这对于大数据文件来说既麻烦又慢。
有人知道可以使用的快速方法吗?
也许这可以转换范围内的日期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
您可以使用该split
函数并解析出字符串,因为您将(假设在这里)有dd:mm:yy:hh:mm:ss
前三个是日期,后三个是时间。
一种快速的方法您可以使用下面的代码
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
仅使用 Excel 公式,不使用 VBA 的方法
=DATE(2000+MID(A1,7,2),MID(A1,4,2),LEFT(A1,2))+TIMEVALUE(RIGHT(A1,8))
我假设,例如,凌晨 1 点表示为 01:00:00,即不会在任何地方丢弃读数为零,6 个元素中的每个元素总是两个字符。
这是一个简单的 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 年,但这对最终结果没有任何影响,无论如何都有 2 位数的年份.