我有一行数据(单元格A3和向下),其中包含yyyymmdd hhmmss
格式的Unix时间戳,我试图自动转换为mm/dd/yy hh:mm
格式
到目前为止,当我从单元格A1开始数据时,我的代码工作,但我需要A1保持空白,因此数据从A2开始。 Here是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
)在我的情况下也不起作用。
答案 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