日期格式dd:mm:yy:hh:mm:ss到dd / mm / yy hh:mm:ss

时间:2012-08-29 22:02:09

标签: excel vba datetime excel-vba

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

任何人都知道可以使用的快速方法吗?

6 个答案:

答案 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)

快速方法您可以使用以下代码

  1. 将某个文件夹中所有文件的DateLastModified读入数组
  2. 在临时工作表中转储和排序数组
  3. 存储已排序的数组(位于下面的变量Y中)
  4. <强>代码

    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,但这对最终结果没有影响无论如何都有两位数的年份。