我需要按时间顺序对此列进行排序,但是当我导入数据时,某些单元格被识别为自定义格式 (A2-A4),而其他单元格则为通用格式 (A5-11)。A2-A4 被识别为日期,但 A5-A11 被识别为一般文本。Excel 无法识别这些都应该是日期。我尝试将它们格式化为日期,但这不起作用。我已使用文本到列来将时间与数据分开,但是 A2-A4 等单元格在单元格中留下了午夜时间(例如 2/10/2012 0:00:00),但我仍然无法获取当我在列中使用文本时,单元格显示为日期。我已经清除了格式,我已经尝试过格式刷,我已经尝试过=datevalue。我不知道还能做什么。另外,我注意到 Excel 将值识别为日期的单元格,时间以 24 小时时间列出,而其他单元格则不是。
有人可以帮忙吗?
文本如下所示:
A栏 2 2012年10月2日 20:00 3 2012年11月1日 3:00 4 2013年12月5日 15:30 5 2012年10月19日 下午2:00 6 2013年4月18日 下午2:00 7 2013年10月18日 下午2:30 8 2013年12月23日 上午9:00 9 2013年5月31日下午1:00 10 2013年2月16日 下午6:00 11 2013年2月15日下午6:00
我假设,出于某种原因,调整输入数据源以使所有日期都遵循 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从该点开始读取的字符数。由于第一个/是 at FIND("/", A1, 1),第二个是 at 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)
| 归档时间: |
|
| 查看次数: |
14503 次 |
| 最近记录: |