我在列中的字符串中有一些日期。 由于格式似乎是M / DD / YYYY,因此在使用DATEVALUE时有时会出现VALUE错误。 如何转换列以确保所有日期都正确。 例如,以下2个单元格
9/29/2006 12:49:58.956 AM DATEVALUE gives an error
9/12/2008 5:36:59.356 PM DATEVALUE converts to 39791
答案 0 :(得分:0)
你遇到的问题可能是数据被解释为一般字段,并显示为49:59.0 - 这不是文本,这是Datevalue()期望的输入;对于两个输入,Datevalue(CellID)单词,如果您在文本前加上' - 这可以确保将其视为文本。
答案 1 :(得分:0)
你需要选择日期范围(只有一个colunm)...转到:
(在Excel 2010中)
Data >>> Text to Columns
Delimited >>> Next
只需选中Tab
复选框即可。
继承人是神奇的! 您需要定义日期的安排......
在Date
字段中:
选择您需要的内容(正如您在问题中所说的那样M/D/Y
)
Destination
字段:
确保与要格式化的数据相同。
结束。
答案 2 :(得分:0)
您的系统设置似乎使用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