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

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

有人可以帮忙吗?

文字看起来像这样:

         A栏
 2 2/10/2012 20:00
 3 2012年1月11日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
 9 31/05/2013 1:00 pm
 10 16/02/2013 6:00 pm
 11 15/02/2013 6:00 pm

出于某种原因,我会假设调整input数据馈送,以便所有date遵循Excel假定的惯例是不切实际的,因为这可能是您的问题的最简单的解决scheme。

对于以文本forms存储的单元格,我假定我们知道正在读取的date格式(即DD / MM / YYYY),并保持不变。 对于像DD/MM/YYYY HH:MM PM这样的string,我们可以执行以下操作:

(1)当天必须存储在第一个斜杠之前的字符中,所以我们可以通过写入来提取它:

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

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

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

在这里, FIND("/", A1, 1) + 1告诉Excel返回第一个/的位置,因为从那个月开始,我们添加一个。 现在我们需要findx ,从这个点读取的字符数。 由于第一个是在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公式强制这些date格式:

=DATE(YEAR_FORMULA, MONTH_FORMULA, DAY_FORMULA

(4)如果你想保留关于小时的信息,那么如果字段中不存在前导空白(不是说这不能用=TRIM来避开),你可以使用:

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

然后,您可以将date添加到时间值以获取完整的date时间:

=DATE(YEAR_FORMULA, MONTH_FORMULA, DAY_FORMULA) + TIME_FORMULA

如果date格式已经正确,则不希望尝试将string格式化为date,因此在执行上述任何操作之前,还可以添加=IF语句:

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

用上述步骤replaceADJUST的完整解决scheme可能如下所示:

=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)

你如何导入数据?

如果通过双击或通过文件>打开来打开CSV文件,则Excel将parsing该文件,并且无法看到该向导。 date将根据您的区域设置进行解释。 如果您的区域设置和CSV文件的date格式不匹配,那么许多date将是错误的。

相反,打开一个新文件,然后通过数据>从文本。 导航到CSV文件并将其打开。 然后你会得到导入向导。 在步骤3中,select该列并将其设置为date。 然后select文件中显示的date,月份和年份的顺序。

在这里输入图像说明

正如@Tim所暗示的,解决这个问题的最好方法可能是在源代码或者在它的input中,但是一旦在Excel中仍然可以通过复制文本格式的date和parsing文本到列和固定宽度来处理在一年之后(在10 )。 在这个过程中(第3步3),您可以select将左侧列的输出视为Date:MDY。 然后一起添加date和时间并格式化。