1

我想使用 VBA 将存储在格式文件中的日期转换dd:mm:yy:hh:mm:ss为可用于使用 VBA 处理文件的 excel 中排序的日期。我找不到任何紧凑的东西。我已经尝试将文本转换为列,然后将分离出来的值组合回日期和时间,但这对于大数据文件来说既麻烦又慢。

有人知道可以使用的快速方法吗?

4

6 回答 6

2

也许这可以转换范围内的日期A1:A10

[A1:A10]=[IF({1},TEXT(SUBSTITUTE(A1:A10,":",""),"00\/00\/00  00\:00\:00"))]
于 2012-08-29T22:09:08.630 回答
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
于 2012-08-29T22:45:30.547 回答
0

您可以使用该split函数并解析出字符串,因为您将(假设在这里)有dd:mm:yy:hh:mm:ss 前三个是日期,后三个是时间。

于 2012-08-29T22:20:34.000 回答
0

一种快速的方法您可以使用下面的代码

  1. DateLastModified将某个文件夹中的所有文件读入一个数组
  2. 在临时工作表中转储和排序数组
  3. 存储排序后的数组(在下面的变量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
于 2012-08-30T02:23:44.850 回答
0

仅使用 Excel 公式,不使用 VBA 的方法

=DATE(2000+MID(A1,7,2),MID(A1,4,2),LEFT(A1,2))+TIMEVALUE(RIGHT(A1,8))

我假设,例如,凌晨 1 点表示为 01:00:00,即不会在任何地方丢弃读数为零,6 个元素中的每个元素总是两个字符。

于 2012-08-30T05:50:44.443 回答
-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 年,但这对最终结果没有任何影响,无论如何都有 2 位数的年份.

于 2012-08-30T07:01:40.390 回答