我目前在美国东部时间,我公司使用的日期格式是
月/日/年时:分:秒
我需要复制并粘贴从其他地区提取的日期/时间,并且它们具有混合格式。有些与我的格式相同,而有些则使用英国格式
日/月/年:最小:秒
目前,我必须手动编辑英国格式以与其他格式匹配,以便我的日期公式不会出错。这开始成为问题,因为我面对的记录超过200条,每条记录都有不同的时间。
我可以用来解决这个问题的代码或公式吗?我知道日期时间格式可以通过系统区域设置来解决,但这没有用,因为更改为任何格式仍然需要我手动编辑那些不受影响的格式。
我正在考虑使用Visual Basic迭代,使用每一行的唯一ID来识别它是英国还是美国。我是在正确的轨道上吗?
否则是否有可用的excel公式或方法?
提前致谢
答案 0 :(得分:4)
你应该始终瞄准将看起来像日期的东西转换成日期。日期始终为日期,您可以以任何您想要的格式显示日期。它甚至可以在从一种语言转换到另一种语言的过程中存活下来。
因此,如果您的来源是约会,那么您可以。如果它是一个字符串,我会这样做:
最终您必须将月份名称从一种语言转换为另一种语言,如下例所示:
A1包含JANFEBMAR...
A2包含JÄNFEBMÄR...
转换公式=MID(A2;FIND("MAR";A1);3)
编辑 以回复凯尔的评论:
除了德语(奥地利)语言环境会立即将此字符串识别为日期之外,让我们将问题分解为可咀嚼的部分。您的日期字符串在A1
中被假设TIMEVALUE(RIGHT(A1;8))
分割我们必须在动态位置对抗分隔符的日期。
可以找到分隔符的位置 2a)=FIND("/";A1;1)
...找到第一个分隔符的位置
2b)=FIND("/";A1;4)
...第二个分隔符,假设第一个数字只能是1个或2个字符,之前没有空格 - 或者我们必须用术语(2a)+1替换常量“4”
2c)=FIND("/";A1;FIND("/";A1;1)+1)
...更安全的(2b)
现在我们已经准备好构建左边的中间和右边的
了 3a)=LEFT(A1;FIND("/";A1;1)-1)
... 第一个数字 ...(2a)-1的长度
3b)=MID(A1;FIND("/";A1;1)+1;FIND("/";A1;FIND("/";A1;1)+1)-FIND("/";A1;1)-1)
... 第二个数字 ...开始:=(2a)+ 1,num_Chars =(2c) - (2a)-1
3c)=MID(A1;FIND("/";A1;FIND("/";A1;1)+1)+1;4)
... 第3个数字 ... start:=(2c)+1,num_chars = 4 - 假设年份总是4位数。更抽象的情况是(3b),(2c)是第一个空白的=FIND()
如何解释尤其是第一和第二个数字(即MM / DD或DD / MM)取决于你。
现在是有趣的部分,即将所有这些公式连接成一个怪物来获取日期
4a)首先输入= DATE(1; 2; 3)
4b)用(3c)代替1,用(3b)代替2,用(3a)代替3 ......不要复制领先的“=”
4c)=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(RIGHT(A1;8))
你没有看到时间,只有约会! ....记得给出一个显示日期和时间的自定义单元格格式,即“DD.MM.YYYY hh:mm:ss”
好的......这个公式绝对不可读且不可理解,因此您可能希望在(临时)字段/列中显示中间结果。
此公式仅在输入字符串或多或少严格格式化时才有效。它可以应对第一和第二个数字中的一些空白,但从YYYY开始变得棘手。然后需要包含其他概念,例如在=SUBSTITUTE(A1;" ";"")
之前删除所有其他空白等等。
提示:我总是构建这样的复杂公式:隔离单个单元格中的术语,然后将它们合并为一个大型公式