VBA将ddmmyyyy文本转换为日期

时间:2017-07-01 21:11:20

标签: excel excel-vba excel-formula vba

似乎有很多类似的问题,但似乎没有什么能够回答这个问题。

我创建了以下子项将一列文本转换为日期。它适用于某些情况,即日期有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执行此操作的最佳方法,因为一切似乎都遇到了截断的零问题。提前致谢

1 个答案:

答案 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/20171/12/2017

修改

查看10022017,我意识到11220171/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(DATEVALU‌​E(LEFT(A1,1)&"/"&MID‌​(A1,2,2)&"/"&RIGHT(A‌​1,4)),"dd/mm/yyyy"))