21/03/2004 不被记录为日期,而 7/3/2004 被记录为日期。有人知道如何删除月份值从 0 开始的日期值中的所有 0 吗?
因此,粘在左边距的列不会以某种方式自动转换。粘在右边的列就没问题。
答案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 日期。我在上面的代码中分解了这三部分的计算。
年份计算如下:
- 反转日期字符串(如上所述,截断时间)。
- 使用 SEARCH 函数查找此反转字符串中第一个“/”的位置(此斜线实际上是未反转日期字符串中的第一个斜线。)
- 使用 RIGHT 函数从日期字符串的右侧取出那么多的字符。
月份计算步骤如下:
- 找到第一个斜线的位置未逆转日期字符串。
- 通过计算此位置与年份计算中确定的第二个“/”的位置之间的差值来确定月份的字符数(可以是 1 或 2)。
- 使用 MID 函数返回第一个斜线和第二个斜线之间的字符。
日计算是最简单的。
- 使用与月份计算相同的方法计算第一个“/”的位置。
- 使用 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 中进行日期时间转换之前,您可能还可以检查以下事项:
检查系统语言/区域设置,尤其是日期时间格式。Excel 使用默认的系统日期时间设置,因此不同地区的日期时间转换会有所不同。
确保单元格值中没有多余的空格或隐藏的换行符,带有空格的有效日期时间值将被视为文本值,而不是日期时间,因此 Excel 不会自动转换它。
使用 Excel 的自定义单元格格式选项,您可以在其中指定自己的转换规则,例如 DD/MM/YYYY。
答案3
假设源格式为 dd/mm/yyyy。尝试使用“文本到列”功能进行转换。
选择日期列
数据 > 文本到列 > 下一步 > 下一步 > 在“列数据格式”下选择“日期”并从下拉菜单中选择源格式 - “DMY” > 确定
答案4
Excel 中的默认数据格式是:dd/m/yyyy。左边距不会自动转换,因为您选择了:m/dd/yyyy。只需选择正确的格式即可解决您的问题。