似乎有很多类似的问题,但似乎没有什么能够回答这个问题。
我创建了以下子项将一列文本转换为日期。它适用于某些情况,即日期有8个字符,如10022017,但如果值有7个字符,如1022017则不行。
任何想法都赞赏。
Sub convertDate()
'Find the last Row with data in a Column
Dim lastRow As Long
Dim i As Long
With ActiveSheet
lastRow = .Cells(.Rows.Count, ColumnSelect).End(xlUp).Row
End With
'convert column from string to date
For i = RowSelect To lastRow
Cells(i, ColumnSelect).Value = Format(Cells(i, ColumnSelect).Value, "00/00/0000")
Next i
End Sub
大家好,仍然有一些问题,理想的公式似乎是= DATEVALUE(TEXT(A1,“00-00-0000”)),例如A1 =例如02022017.仍未找到使用VBA执行此操作的最佳方法,因为一切似乎都遇到了截断的零问题。提前致谢
答案 0 :(得分:1)
如果你的格式一致,那就试试吧。
当有7个字符时,这会在0
之前添加Cells(i, ColumnSelect).Value
。
For i = RowSelect To lastRow
Select Case Len(Trim(Cells(i, ColumnSelect).Value))
Case 8
Cells(i, ColumnSelect).Value = Format(Cells(i, ColumnSelect).Value, "00/00/0000")
Case 7
Cells(i, ColumnSelect).Value = Format("0" & _
Cells(i, ColumnSelect).Value, "00/00/0000")
End Select
Next i
但请注意1122017
之类的数字...这可以是11/2/2017
或1/12/2017
修改强>
查看10022017
,我意识到1122017
将1/12/2017
而非11/2/2017
,因为mm
零没有被截断。
OP也想要一个公式
=IF(LEN(A1)=8,TEXT(DATEVALUE(LEFT(A1,2)&"/"&MID(A1,3,2)&"/"&RIGHT(A1,4)),"dd/mm/yyyy"),TEXT(DATEVALUE(LEFT(A1,1)&"/"&MID(A1,2,2)&"/"&RIGHT(A1,4)),"dd/mm/yyyy"))