Excel使用具有多种不同区域格式的日期/时间。 VB?公式?

时间:2011-09-08 16:56:43

标签: excel excel-vba excel-2007 excel-formula vba

我目前在美国东部时间,我公司使用的日期格式是

  

月/日/年时:分:秒

我需要复制并粘贴从其他地区提取的日期/时间,并且它们具有混合格式。有些与我的格式相同,而有些则使用英国格式

  

日/月/年:最小:秒

目前,我必须手动编辑英国格式以与其他格式匹配,以便我的日期公式不会出错。这开始成为问题,因为我面对的记录超过200条,每条记录都有不同的时间。

我可以用来解决这个问题的代码或公式吗?我知道日期时间格式可以通过系统区域设置来解决,但这没有用,因为更改为任何格式仍然需要我手动编辑那些不受影响的格式。

我正在考虑使用Visual Basic迭代,使用每一行的唯一ID来识别它是英国还是美国。我是在正确的轨道上吗?

否则是否有可用的excel公式或方法?

提前致谢

1 个答案:

答案 0 :(得分:4)

你应该始终瞄准将看起来像日期的东西转换成日期。日期始终为日期,您可以以任何您想要的格式显示日期。它甚至可以在从一种语言转换到另一种语言的过程中存活下来。

因此,如果您的来源是约会,那么您可以。如果它是一个字符串,我会这样做:

  1. 使用= DATEVALUE()转换源字符串...如果月份名称是系统语言,这将有效
  2. 如果临时更改系统语言不是一个选项,则下一个是= DATE(yy,mm,dd),其中必须使用= LEFT(...),= MID(...)创建参数, = RIGHT(...)
  3. 最终您必须将月份名称从一种语言转换为另一种语言,如下例所示:

    A1包含JANFEBMAR...

    A2包含JÄNFEBMÄR...

    转换公式=MID(A2;FIND("MAR";A1);3)

  4. 编辑 以回复凯尔的评论:

    除了德语(奥地利)语言环境会立即将此字符串识别为日期之外,让我们将问题分解为可咀嚼的部分。您的日期字符串在A1

    中被假设
    1. 时间部分很简单:它是一个附加词TIMEVALUE(RIGHT(A1;8))
    2. 分割我们必须在动态位置对抗分隔符的日期。

      可以找到分隔符的位置

      2a)=FIND("/";A1;1) ...找到第一个分隔符的位置

      2b)=FIND("/";A1;4) ...第二个分隔符,假设第一个数字只能是1个或2个字符,之前没有空格 - 或者我们必须用术语(2a)+1替换常量“4”

      2c)=FIND("/";A1;FIND("/";A1;1)+1) ...更安全的(2b)

    3. 版本
    4. 现在我们已经准备好构建左边的中间和右边的

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

    5. 如何解释尤其是第一和第二个数字(即MM / DD或DD / MM)取决于你。

      1. 现在是有趣的部分,即将所有这些公式连接成一个怪物来获取日期

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

      2. 你没有看到时间,只有约会! ....记得给出一个显示日期和时间的自定义单元格格式,即“DD.MM.YYYY hh:mm:ss”

        好的......这个公式绝对不可读且不可理解,因此您可能希望在(临时)字段/列中显示中间结果。

        此公式仅在输入字符串或多或少严格格式化时才有效。它可以应对第一和第二个数字中的一些空白,但从YYYY开始变得棘手。然后需要包含其他概念,例如在=SUBSTITUTE(A1;" ";"")之前删除所有其他空白等等。

        提示:我总是构建这样的复杂公式:隔离单个单元格中的术语,然后将它们合并为一个大型公式