2014-01-29 66 views
0

我只是想弄清楚在一個巨大的電子表格上更改日期格式的最簡單方法,但最大的問題似乎是年月和星期幾轉換。我需要它是mm/dd/yyyy,但目前它是yyyymmdd。謝謝你的幫助。使用VBA可以將日期格式從20140129更改爲01/29/2014嗎?

+1

http://www.excel-easy.com /vba/examples/macro-recorder.html - 記錄自己將格式更改爲任何你想要的。有很多日期格式 - 只需右鍵單擊並單擊「更改格式」 – Stepan1010

+0

問題出在我的電子表格上,年份是第一個。我查看了所有提供的格式,而且沒有一個會將年度推遲到最後。他們嘗試將20140129更改爲20/14/0129,這顯然會導致錯誤。 – novak

+1

你在西半球嗎?這可能是你有一個本地化爲使用非西方日期格式的Excel版本。在任何情況下,這應該回答你的問題:http://office.microsoft.com/en-us/excel-help/format-a-date-the-way-you-want-HA102809474.aspx#_Toc320186183 – Stepan1010

回答

2

我可以使用VBA將日期格式從20140129更改爲01/29/2014嗎?

您的意思是這樣的?

Sub Test() 
    Dim temp As String 
    Dim D As String, M As String, Y As String 

    temp = "20140129" 

    Y = Left(temp, 4) 
    M = Mid(temp, 5, 2) 
    D = Right(temp, 2) 

    '~~> This will give you 01/29/2014 
    Debug.Print Format(DateSerial(Val(Y), Val(M), Val(D)), "mm/dd/yyyy") 
End Sub 

編輯從評論

跟進。

使用此代碼(TRIED AND TESTED)。我假設的日期(如字符串)存儲在柱A從A1起中說Sheet1

Sub Test() 
    Dim temp As String 
    Dim D As String, M As String, Y As String 
    Dim ws As Worksheet 
    Dim lRow As Long, i As Long 

    '~~> Change this to the relevant worksheet 
    Set ws = ThisWorkbook.Sheets("Sheet2") 

    With ws 
     lRow = .Range("A" & .Rows.Count).End(xlUp).Row 

     For i = 1 To lRow 
      temp = CStr(.Range("A" & i).Value) 

      Y = Left(temp, 4) 
      M = Mid(temp, 5, 2) 
      D = Right(temp, 2) 

      .Range("A" & i).NumberFormat = "mm/dd/yyyy" 

      '~~> This will give you 01/29/2014 
      .Range("A" & i).Formula = Format(DateSerial(Val(Y), Val(M), Val(D)), "mm/dd/yyyy") 
     Next i 


    End With 
End Sub 

截圖

enter image description here

+0

@Downvoter。謹慎評論? –

+1

期待O.K.對我來說...... –

+0

Downvote不是我的,但是這看起來非常接近我想要做的。但我需要使用它的數百個日期都不同,但格式爲yyyymmdd。 – novak