如何将“12/04/2003”这样的单元格转换为日期格式?

如何将“12/04/2003”这样的单元格转换为日期格式?

21/03/2004 不被记录为日期,而 7/3/2004 被记录为日期。有人知道如何删除月份值从 0 开始的日期值中的所有 0 吗?

因此,粘在左边距的列不会以某种方式自动转换。粘在右边的列就没问题。

http://puu.sh/27CEm

答案1

通常,可以使用 DATEVALUE 函数将文本日期转换为 Excel 日期值(即 Excel 会识别为日期的数字)来解决此问题。用法为 DATEVALUE(date_string 或 cell_address)。

但是,这在这里不起作用,因为 1) 在您的示例字符串中,日在月份之前,而 DATEVALUE 期望月份后跟日,并且 2) 对于某些日期字符串,还包括时间。

这是适用于您提供的示例的数组公式替代方案。需要使用Control- Shift-Enter组合键输入。

  =DATE(
        RIGHT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)),

        LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-1),

        LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)-LEN(LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))+1)))
        ) 

这个非常复杂的数组公式(我希望有人可以提供一个更简单的公式)使用 DATE 函数来构造 Excel 日期值。(我构建日期时碰巧在单元格 F8 中有原始日期字符串。)

需要转换的日期字符串不能以原始形式使用,因为它有时包含时间。应改用RIGHT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8)。此公式在日期字符串中搜索空格。如果找到空格,则使用 LEFT 函数获取空格左侧的所有字符;如果未找到空格,则仅返回原始字符串。

公式的最外层是 DATE 函数:当给定年、月、日时,它会得出 Excel 日期。我在上面的代码中分解了这三部分的计算。

年份计算如下:

  1. 反转日期字符串(如上所述,截断时间)。
  2. 使用 SEARCH 函数查找此反转字符串中第一个“/”的位置(此斜线实际上是未反转日期字符串中的第一个斜线。)
  3. 使用 RIGHT 函数从日期字符串的右侧取出那么多的字符。

月份计算步骤如下:

  1. 找到第一个斜线的位置未逆转日期字符串。
  2. 通过计算此位置与年份计算中确定的第二个“/”的位置之间的差值来确定月份的字符数(可以是 1 或 2)。
  3. 使用 MID 函数返回第一个斜线和第二个斜线之间的字符。

日计算是最简单的。

  1. 使用与月份计算相同的方法计算第一个“/”的位置。
  2. 使用 LEFT 函数从字符串左侧取出那么多字符(减 1)。

有不太复杂的方法来获得结果,其中最简单的方法无疑是使用功能区数据选项卡上的文本到列命令,正如@Barry所建议的那样。

另一种方法是使用 REGEX 模式匹配函数。该函数不是内置于 Excel 中的,但可以使用 VBA 代码构建和访问。虽然代码有点棘手,但网上有几个版本可用(例如这个例子)。但是,使用函数会非常简单。例如,获取日期的匹配表达式可能类似于REGEXP("./",F8),然后可以在 DATE 函数中使用它来获取 Excel 日期值。

为了方便起见,这里是完整形式的公式。

  =DATE(RIGHT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)),LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-1),MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))+1)),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)-LEN(LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))+1))))

答案2

粘在左侧的值通常表示它是一个文本值,而数字/日期值则向右对齐。

在 Excel 中进行日期时间转换之前,您可能还可以检查以下事项:

  1. 检查系统语言/区域设置,尤其是日期时间格式。Excel 使用默认的系统日期时间设置,因此不同地区的日期时间转换会有所不同。

  2. 确保单元格值中没有多余的空格或隐藏的换行符,带有空格的有效日期时间值将被视为文本值,而不是日期时间,因此 Excel 不会自动转换它。

  3. 使用 Excel 的自定义单元格格式选项,您可以在其中指定自己的转换规则,例如 DD/MM/YYYY。

答案3

假设源格式为 dd/mm/yyyy。尝试使用“文本到列”功能进行转换。

选择日期列

数据 > 文本到列 > 下一步 > 下一步 > 在“列数据格式”下选择“日期”并从下拉菜单中选择源格式 - “DMY” > 确定

答案4

Excel 中的默认数据格式是:dd/m/yyyy。左边距不会自动转换,因为您选择了:m/dd/yyyy。只需选择正确的格式即可解决您的问题。

相关内容