2017-07-01 324 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」;) –