我在列中的字符串中有一些日期。 因爲格式似乎是M/DD/YYYY,所以在使用DATEVALUE時有時會出現VALUE錯誤。 如何轉換列以確保所有日期都正確。 例如,下面的2個細胞無法在Excel中將日期字符串轉換爲日期值
9/29/2006 12:49:58.956 AM DATEVALUE gives an error
9/12/2008 5:36:59.356 PM DATEVALUE converts to 39791
我在列中的字符串中有一些日期。 因爲格式似乎是M/DD/YYYY,所以在使用DATEVALUE時有時會出現VALUE錯誤。 如何轉換列以確保所有日期都正確。 例如,下面的2個細胞無法在Excel中將日期字符串轉換爲日期值
9/29/2006 12:49:58.956 AM DATEVALUE gives an error
9/12/2008 5:36:59.356 PM DATEVALUE converts to 39791
您遇到的問題可能是該數據得到解釋爲一般領域,並顯示爲,說49:59.0 - 這是不是文字,這是Datevalue()期望的輸入;對於這兩種輸入,Datevalue(CellID)單詞如果在文本前添加' - 確保將其視爲文本。
看來您的系統設置使用dd/mm/yyyy
作爲短日期格式。和datevalue
函數使用此設置,因此它嘗試從字符串的第一部分讀取日期,並從第二部分讀取月份。如你的例子9/29/2006 12:49:58.956 AM
有29個月沒有月份,那麼它給出了錯誤,在第二個例子中,它給出了39791 = 2008年12月9日和2008年9月12日。
如果您將系統設置中的短日期格式更改爲mm/dd/yyyy
然後datevalue
函數將正常工作,但這是不可接受的,所以我們需要用月份來替換月份,每月和每月一次以獲得正確的日期。
我不知道我們是否可以用Excel公式做到這一點,但我們可以簡單地用VBA來做到這一點。 因此請嘗試下面的代碼:
Sub Test()
Dim d1 As Variant, d2 As Variant, td As Date
Dim Rng As Range, CL As Range
Set Rng = Range("A1:A2") ' change this to your range
For Each CL In Rng
d1 = Split(CL.Value, " ")
d2 = Split(d1(0), "/")
td = DateSerial(d2(2), d2(0), d2(1))
CL.Offset(0, 1) = td
CL.Offset(0, 1).NumberFormat = "mm/dd/yyyy" ' change the Date format as you need
'CL.Offset(0, 1).NumberFormat = "dd/mm/yyyy"
Next
End Sub
如果您只是想要日期,那麼使用'= INT(A1)'它會減少時間並返回日期。然後,您可以將其包裝在TEXT(...,「m/dd/yyyy」)中,或者將單元格的格式更改爲短日期。 –