2011-09-08 201 views
0

我目前在美国东部和我公司内部使用的日期格式是Excel使用多个不同区域格式的日期/时间。 VB?公式?

月/日/年时:分:秒

我需要复制和粘贴日期/时间提取来自其他地区,他们有不同的格式。有些是相同的,因为我有格式的,而有些则是用英国格式

日/月/年时:分:秒

目前,我必须手动编辑UK格式与其余的匹配,以便我的日期公式不会有错误。这是一个问题,因为我面对200多条记录,每条记录的时间都不一样。

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

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

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

在此先感谢

+0

问题是:是从其他地区输入的数据作为“日期”还是字符串? – MikeD

+0

我在猜测它的字符串。数据从Web界面导出,所以我无法确定它是否以字符串或日期导出。由它的外观..它似乎是字符串 – Kyle

+0

进入一个空单元格,并尝试添加1日期。你会得到一个数字结果......这是一个日期......你得到一个#VALUE错误......'不是一个字符串;-)我不是说挑剔......但它决定了你的策略想要使用.... – MikeD

回答

4

应始终着眼于转换的东西,看起来像一个日期为日期。日期将始终保持一个日期,您可以以任何您想要的格式显示它。它甚至可以在从一种语言到另一种语言的过渡中幸存

所以,如果你的来源是一个日期,你很好。如果它是一个字符串,我这样做:

  1. 使用= DATEVALUE()...如果月份名称在系统语言,这将工作
  2. 转换源字符串,如果临时更改系统语言是不是一个选项,接下来将是= DATE(yy,mm,dd),其中参数必须使用= LEFT(...),= MID(...),= RIGHT(...)创建
  3. 最终你必须月份名称从一种语言转换成另一种像下面的例子:

    A1包含JANFEBMAR...

    A2包含JÄNFEBMÄR...

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

编辑在回答凯尔的评论:

除了这个事实,德国(奥地利)区域会马上认出这串作为一个日期,让我们把问题分成咀嚼片。您的日期字符串在A1

  1. asumed时间部分很简单:它是一个附加项TIMEVALUE(RIGHT(A1;8))
  2. 分裂我们在动态位置对分隔符打日期。定界符的位置可以通过

    2A)=FIND("/";A1;1)找到...找到第一分隔符

    2b)中=FIND("/";A1;4) ...第二分隔符的位置,asuming第一图形可以是仅1或2个字符的和无空格前 - 或者我们必须更换常数“4”的项(2A)+1

    2C)=FIND("/";A1;FIND("/";A1;1)+1) ......更安全的版本(2B)

  3. 现在我们已经准备好来构建我们留下的东西最中期和右侧的

    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 =(C) - (2A)-1

    3C)=MID(A1;FIND("/";A1;FIND("/";A1;1)+1)+1;4) ... 3图 ...开始:=(2C)+1,NUM_CHARS = 4 - asuming年始终是4位数。更抽象的情况下将是一个(3b)的与(2C)是用于一个=FIND()第一坯料

如何解释尤其是第一和第二数字(即MM/DD或DD/MM)是可达您。

  1. 现在了有趣的部分,即连接所有这些公式为一个怪物来获得日期

    4a)的通过输入= DATE(1开始; 2; 3)

    4b)的取代通过1(3c)中,由2(3b)中,由3(3A)...不要复制前导 “=”

    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;" ";"")删除所有空白,等等,等等

提示:我一直在构建复杂的公式是这样的:分离单个细胞的条款,后来他们合并一个大公式

+1

不错的一个 - *国际化的注意事项:*取决于你的Excel版本(特别是在美国或英国,公式分隔符是','(逗号)而不是';'(分号) – JMax

+0

@JMax ...感谢提醒和抱歉是的,我经常忘记对我的公式进行修改 - 我在德国(奥地利)现场环境工作:-O – MikeD

+0

假设我有一个字符串2/9/2011 15:23:40。现在是9月2日。我将时间纳入您提到的解决方案中? – Kyle

相关问题