【问题标题】:Cannot convert date string to datevalue in Excel无法在 Excel 中将日期字符串转换为日期值
【发布时间】:2016-01-15 16:20:40
【问题描述】:

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

【问题讨论】:

  • 如果你只想要日期然后使用=INT(A1)它会缩短时间并返回日期。然后您可以将其包装在 TEXT(...,"m/dd/yyyy") 中,或者将单元格的格式更改为短日期。

标签: excel


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您需要选择包含日期的范围(仅一列)...转到:

    (在 Excel 2010 中)

    Data >>> Text to Columns
    

    在对话框中选择:

    Delimited >>> Next
    

    只需选中Tab 复选框。

    这就是魔法! 您需要定义日期的安排...

    Date 字段中: 选择你需要的(正如你在问题中所说的M/D/Y

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

    然后结束。

    【讨论】:

      【解决方案3】:

      您的系统设置似乎使用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
      

      【讨论】:

        猜你喜欢
        • 2021-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多