无法在Excel中将日期字符串转换为日期值

时间:2016-01-15 16:20:41

标签: excel

我在列中的字符串中有一些日期。 由于格式似乎是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

3 个答案:

答案 0 :(得分:0)

你遇到的问题可能是数据被解释为一般字段,并显示为49:59.0 - 这不是文本,这是Datevalue()期望的输入;对于两个输入,Datevalue(CellID)单词,如果您在文本前加上' - 这可以确保将其视为文本。

答案 1 :(得分:0)

你需要选择日期范围(只有一个colunm)...转到:

(在Excel 2010中)

Data >>> Text to Columns

enter image description here 在对话框内选择:

Delimited >>> Next

enter image description here

只需选中Tab复选框即可。

enter image description here

继承人是神奇的! 您需要定义日期的安排......

enter image description here

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