在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
只需selectTab
checkbox。
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/yyyy
则datevalue
函数将正常工作,但这是不可接受的,所以我们需要将月份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