【问题标题】:How to convert text to date format in Excel如何在 Excel 中将文本转换为日期格式
【发布时间】:2014-01-23 00:47:52
【问题描述】:

我需要按时间顺序对该列进行排序,但是当我导入数据时,一些单元格被识别为自定义格式 (A2-A4),而其他单元格则被识别为通用格式 (A5-11)。 A2-A4 被识别为日期,但 A5-A11 被识别为一般文本。 Excel 没有认识到这些都应该是日期。我尝试将它们格式化为日期,但这不起作用。我已经使用文本到列来将时间与数据分开,但是像 A2-A4 这样的单元格会在单元格中留下一个午夜的时间(例如 2/10/2012 0:00:00),我仍然无法得到当我使用文本到列时,单元格显示为日期。我已经清除了格式,我试过格式刷,我试过 =datevalue。我不确定还能做什么。另外,我注意到 Excel 将值识别为日期的单元格,时间以 24 小时制列出,而其他的则不是。

有人可以帮忙吗?

文字如下:

A栏 2 2012 年 2 月 10 日 20:00 3 2012 年 1 月 11 日 3:00 4 2013 年 5 月 12 日 15:30 5 2012 年 10 月 19 日下午 2:00 6 2013 年 4 月 18 日下午 2:00 7 2013 年 10 月 18 日下午 2:30 8 23/12/2013 上午 9:00 9 2013 年 5 月 31 日下午 1:00 10 2013 年 2 月 16 日下午 6:00 11 2013 年 2 月 15 日下午 6:00

【问题讨论】:

  • 问题可能不是时间而是月日顺序。如果您的默认日期格式是 mm/dd/yyy(而不是 dd/mm/yyyy),那么如果第一部分 >12,Excel 将无法解析为日期。您如何以及从何处导入这些数据?

标签: excel date format


【解决方案1】:

我认为,出于某种原因,调整输入数据馈送以使所有日期都遵循 Excel 假定的约定是不切实际的,因为这可能是解决问题的最简单方法。

对于存储为文本的单元格,我假设我们知道正在读取的日期的格式(即 DD/MM/YYYY)并且它将保持不变。对于DD/MM/YYYY HH:MM PM 这样的字符串,我们可以执行以下操作:

(1)天必须存储在第一个斜杠之前的字符中,所以我们可以这样提取:

DAY_FORMULA: =LEFT(A1, FIND("/", A1, 1)-1)

(2) 月份必须存储在第一个和第二个斜杠之间的字符中。它占用一个或两个字符,所以我们可以写如下:

MONTH_FORMULA: =MID(A1, FIND("/", A1, 1) + 1, x)

这里,FIND("/", A1, 1) + 1 告诉 Excel 返回第一个 / 的位置:因为月份开始之后,我们添加一个。现在我们需要找到x,即从该点读取的字符数。由于第一个/ 位于FIND("/", A1, 1),第二个位于FIND("/", A1, FIND("/", A1, 1)+1),因此两个斜杠之间的字符数由下式给出:

FIND("/", A1, FIND("/", A1, 1)+1) - FIND("/", A1, 1) - 1

完整的MONTH_FORMULA可以写成:

MONTH_FORMULA: =MID(A1, FIND("/", A1, 1)+1, FIND("/", A1, FIND("/", A1, 1)+1)-FIND("/", A1, 1)-1)

(3) 年份包含在第二个斜线之后的最后四位数字中,因此我们可以将年份写成:

YEAR_FORMULA: =MID(A1, FIND("/", A1, FIND("/", A1, 1)+1)+1, 4)

然后您可以使用标准日期公式将它们强制转换为日期格式:

=DATE(YEAR_FORMULA, MONTH_FORMULA, DAY_FORMULA

(4) 如果您想保留有关时间的信息,那么如果字段中不存在前导空格(并不是说这不能用 =TRIM 规避),您可以使用:强>

TIME_FORMULA: =TIMEVALUE(MID(A1, FIND(" ", A1, 1)+1, LEN(A1)))

然后您可以将日期添加到时间值以获得完整的日期时间:

=DATE(YEAR_FORMULA, MONTH_FORMULA, DAY_FORMULA) + TIME_FORMULA

如果日期已正确格式化,您不想尝试将字符串格式化为日期,因此您还可以在执行上述任何操作之前添加=IF 语句:

=IF(ISTEXT(A1), ADJUST, A1)

ADJUST 替换为上述步骤的完整解决方案可能如下所示:

=IF(ISTEXT(A1), DATE(MID(A1, FIND("/", A1, FIND("/", A1, 1)+1)+1, 4), MID(A1, FIND("/", A1, 1)+1, FIND("/", A1, FIND("/", A1, 1)+1)-FIND("/", A1, 1)-1), LEFT(A1, FIND("/", A1, 1)-1))+TIMEVALUE(MID(A1, FIND(" ", A1, 1)+1, LEN(A1))), A1)

【讨论】:

  • 干得好..在我的系统中完美运行:)
  • 感谢 Corcovado 提供详细信息。我需要将“Mmm-YY”文本转换为日期。例如,Dec-01 应该是 2001 年 12 月,而不是 1-Dec-2014。使用简单的窗口方法解决 Y2K 问题,以下公式有效(您必须将所有“G2”替换为您的单元格引用):=DATE(IF(VALUE(RIGHT(G2, FIND("-", G2, 1)-2)) < 15, 2000, 1900)+ VALUE(RIGHT(G2, FIND("-", G2, 1)-2)), MONTH(DATEVALUE(LEFT(G2, FIND("-", G2, 1)-1) & " 1")), 1)
【解决方案2】:

如何导入数据?

如果您通过双击或通过“文件”>“打开”打开 CSV 文件,Excel 将对其进行解析,而您没有机会看到向导。日期将根据您的区域设置进行解释。如果您的区域设置的日期格式与 CSV 文件不匹配,很多日期都会出错。

相反,打开一个新文件并通过“数据”>“来自文本”。导航到 CSV 文件并打开它。然后您将获得导入向导。在步骤 3 中,选择列并将其设置为日期。然后选择文件中显示的日、月和年的顺序。

【讨论】:

  • 加一。实际上,即使在导入数据之后您也可以使用它。只需突出显示包含数据的列,然后在Data 选项卡中使用Text to Columns 即可到达上方。 :)
  • 不太确定在 Excel 已经解析数据之后是否为时已晚。现在没时间尝试。我喜欢你的把手。我最喜欢的是“堪萨斯城牛奶人”和“法老的梦想”。
  • I like your handle. My favs are "Kansas City Milk Man" and "Pharao's Dream" 不太清楚这意味着什么。无论如何,如果数据的格式是统一的,是的,它会起作用,但考虑到 OP 的样本,我认为即使你在解析数据之前这样做也不会起作用,因为数据格式不统一。
  • 嗯嗯。我虽然你的用户名是对 42 级乐队的引用。没关系。
【解决方案3】:

正如@Tim 所暗示的那样,解决这个问题的最佳方法可能是在源代码中或在其导入中,但是一旦在 Excel 中,它仍然可以通过复制文本格式的日期并使用 Text to Columns 和 Fixed width 解析这些来处理一年后立即休息(10)。在此过程中(第 3 步,共 3 步),您可以选择将左侧列的输出视为日期:MDY。然后将日期和时间加在一起,并形成适合的格式。

【讨论】:

    猜你喜欢
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多