将'yyyymmdd hhmmss'转换为'mm / dd / yy hh:mm'

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

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

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,都会出错。

有没有人有build议?

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

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

这将做到没有任何循环:

 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 

注意:您可以随意使用任何数字格式的date。

尝试这个:

 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
01/24/2015 19:40
04/04/2015 16:30
12/20/2015 10:05
05/10/2015 21:35

@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