excel - truco - Convierta ''aaaammdd hhmmss'' a ''mm/dd/aa hh: mm''
data formato aaaammdd excel (3)
@ExcelHero respondió mi pregunta por correo electrónico. El siguiente es el código de trabajo para cualquier persona que necesite referencia futura.
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
Tengo una fila de datos (celda A3 y abajo) que contiene una marca de tiempo Unix en formato yyyymmdd hhmmss
que estoy tratando de convertir a formato mm/dd/yy hh:mm
automáticamente .
El código que tengo hasta ahora funciona cuando tengo los datos comenzando en la celda A1, pero necesito que A1 permanezca en blanco, por lo tanto, los datos comienzan en A2. Aquí hay una captura de pantalla de ejemplo de la columna 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
Se equivoca si configuro el rango en A2 o A3 y hacia abajo.
¿Alguien tiene recomendaciones?
Aspectos destacados de depuración y = Mid(z, 5, 2) & "/" & Mid(z, 7, 2) & "/" & Left(z, 4)
pero no estoy seguro de cuál es el problema.
El formato de celdas (personalizado> mm/dd/yyyy hh:mm:ss
) tampoco funciona en mi caso, desafortunadamente.
Esto lo hará sin bucle en absoluto:
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
Nota: puede usar el formato de número para las fechas que desee.
Prueba esto:
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
Luego formatee la columna como prefiera.
Para mí, eso convierte
20150904 213613
20150124 194003
20150404 163056
20151220 100509
20150510 213512
a esto:
04/09/2015 21:36
24/01/2015 19:40
04/04/2015 16:30
20/12/2015 10:05
10/05/2015 21:35