转换' yyyymmdd hhmmss'到' mm / dd / yy hh:mm'

时间:2015-11-12 17:59:49

标签: excel vba excel-vba datetime timestamp

我有一行数据(单元格A3和向下),其中包含yyyymmdd hhmmss格式的Unix时间戳,我试图自动转换为mm/dd/yy hh:mm格式

到目前为止,当我从单元格A1开始数据时,我的代码工作,但我需要A1保持空白,因此数据从A2开始。 Here是A列的示例屏幕截图:

an example screenshot of column A

Sub auto_open()
'
' auto_open Macro
'

'
ChDir "C:\"
Workbooks.Open      Filename:="C:\Users\username\Desktop\file1.csv"
Intersect(Sheets("file1").Range("A:EW"),     Sheets("file1").UsedRange).Copy     ThisWorkbook.Sheets("Golden").Range("A2")
Windows("file1.csv").Activate
Application.CutCopyMode = False
ActiveWorkbook.Close SaveChanges = False

Dim x As Integer
Dim y As String
Dim z As String
Dim w As String

NumRows = Range("A3").End(xlDown).Row

Windows(ThisWorkbook.Name).Activate
For x = 2 To NumRows
     z = Cells(x, 1).Value
     y = Mid(z, 5, 2) & "/" & Mid(z, 7, 2) & "/" & Left(z, 4)
     w = Mid(z, 10, 2) & ":" & Mid(z, 12, 2) & ":" & Mid(z, 14, 2)
     y = y + TimeValue(w)
     Cells(x, 1).Value = y
Next x

Range("A3").Select

End Sub

无论是将范围设置为A2还是A3,都会出错。

有人有推荐吗?

调试突出显示y = Mid(z, 5, 2) & "/" & Mid(z, 7, 2) & "/" & Left(z, 4),但我不确定问题是什么。

不幸的是,

格式单元格(自定义> mm/dd/yyyy hh:mm:ss)在我的情况下也不起作用。

3 个答案:

答案 0 :(得分:2)

这样做完全没有循环:

Sub kyle()
    With [a3].Resize([a1048576].End(xlUp).Row - 2)
        .Value = Evaluate("transpose(transpose(DATE(MID(" & .Address & ",1,4),MID(" & .Address & ",5,2),MID(" & .Address & ",7,2)) + TIME(MID(" & .Address & ",10,2),MID(" & .Address & ",12,2),MID(" & .Address & ",14,2))))")
    End With
End Sub

注意:您可以使用任何数字格式来表示您喜欢的日期。

答案 1 :(得分:1)

试试这个:

Sub Kyle()
  Dim cell As Range

  ThisWorkbook.Activate

  For Each cell In Range("A2", Cells(Rows.Count, "A").End(xlUp))
    If cell.Value Like "######## ######" Then
      cell.Value = CDate(Format(cell.Value, "@@@@-@@-@@@@@:@@:@@"))
    End If
  Next cell
End Sub

然后根据您的喜好格式化列。

对我而言,转换

20150904 213613
20150124 194003
20150404 163056
20151220 100509
20150510 213512

到此:

09/04/2015 21:36
2015年1月24日19:40
04/04/2015 16:30
2015年12月20日10:05
05/10/2015 21:35

答案 2 :(得分:0)

@ExcelHero通过电子邮件回答了我的问题。以下是需要将来参考的任何人的工作代码。

    With [a3].Resize([a65536].End(xlUp).Row - 2)
    If Len(.Item(1)) = 15 Then
        .Value = Evaluate("transpose(transpose(DATE(MID(" & .Address & ",1,4),MID(" & .Address & ",5,2),MID(" & .Address & ",7,2)) + TIME(MID(" & .Address & ",10,2),MID(" & .Address & ",12,2),MID(" & .Address & ",14,2))))")
    End If
    .NumberFormat = "mm/dd/yyyy hh:mm"
End With