在Excel中无法将datestring转换为date值

我在列中的string中有一些date。 由于格式似乎是M / DD / YYYY,所以在使用DATEVALUE时有时会出现VALUE错误。 如何转换列以确保所有date都是正确的。 例如,下面的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 

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

您需要selectdate范围(只有一个柱子)…转到:

(在Excel 2010中)

 Data >>> Text to Columns 

在这里输入图像描述 在对话框中select:

 Delimited >>> Next 

在这里输入图像描述

只需selectTabcheckbox。

在这里输入图像描述

inheritance人是魔术! 你需要定义你的date的安排…

在这里输入图像描述

Date字段中:select你所需要的(就像你在问题中所说的是M/D/Y

Destination字段:请确保您要格式化的数据相同。

并完成。

看起来您的系统设置使用dd/mm/yyyy作为短date格式。 和datevalue函数使用这个设置,所以它尝试从string的第一部分读取一天,从第二部分读取一个月份。 如你的例子9/29/2006 12:49:58.956 AM没有一个月29,然后它给出了错误,在第二个例子中,它给出39791 = 2008年12月9日,而不是2008年9月12日。

如果将系统设置中的短date格式更改为mm/dd/yyyydatevalue函数将正常工作,但这是不可接受的,所以我们需要将月份replace为date和月份以获取正确的date。

我不知道我们是否可以用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