如何在Excel中将文本转换为日期格式

时间:2014-01-23 00:47:53

标签: excel date format

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

有人可以帮忙吗?

文字如下:

        Column A
2    2/10/2012 20:00
3    1/11/2012 3:00
4    5/12/2013 15:30
5    19/10/2012 2:00 pm
6    18/04/2013 2:00 pm
7    18/10/2013 2:30 pm
8    23/12/2013 9:00 am
9    31/05/2013 1:00 pm
10   16/02/2013 6:00 pm
11   15/02/2013 6:00 pm

3 个答案:

答案 0 :(得分:4)

我会假设,出于某种原因,调整输入数据Feed以使所有日期都遵循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)

答案 1 :(得分:2)

如何导入数据?

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

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

enter image description here

答案 2 :(得分:0)

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