2017-07-01 325 views
1

似乎有很多类似的问题,但似乎没有什么似乎回答这个问题。VBA将ddmmyyyy文本转换为日期

我已经创建了下面的子将文本列转换为日期。它适用于某些情况,即日期有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

如果您的格式将是一致的,那么试试这个。

当有7个字符时,在Cells(i, ColumnSelect).Value之前添加0

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"))

+0

谢谢,这是一种路径我在想的,只是不能完全片一起。 另一个想法是试图实现工作簿函数datevalue(文本(任何单元格值,“00-00-0000”) –

+0

像这样'= IF(LEN(A1)= 8,TEXT(DATEVALUE(LEFT A1,2)& “/” &MID(A1,3,2) “/” &RIGHT(α-1,4)), “日/月/年”),TEXT(DATEVALUE(LEFT(A1,1)&“/ “&MID(A1,2,2)&”/“&RIGHT(A1,4)),”dd/mm/yyyy“))' –

+0

或直接:'= DATE(RIGHT(A1,4),LEFT(RIGHT A1,6),2),LEFT(A1,LEN(A1)-6))'并将单元格格式设置为“dd/mm/yyyy”;) –