Excel使用多个不同区域格式的date/时间。 VB? 公式?

我目前在美国东部时间和我公司内使用的date格式是

月/日/年小时:分钟:秒

我需要复制和粘贴从其他地区提取的date/时间,他们有混合格式。 有些与我的格式相同,有些则使用英国格式

日/月/年小时:分钟:秒

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

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

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

否则有没有一个Excel的公式或方法可用于此?

提前致谢

你总是应该把看起来像date的东西转换成date。 date将始终保持一个date,你可以以任何你想要的格式显示它。 它甚至可以在从一种语言到另一种语言的过渡中幸存

所以,如果你的来源是一个date,你很好。 如果是string,我会这样做:

  1. 使用= DATEVALUE()转换源string…如果月份名称是系统语言,这将工作
  2. 如果暂时改变你的系统语言不是一种select,那么下一个就是= DATE(yy,mm,dd),其中参数必须用= LEFT(…),= MID(…),= RIGHT …)
  3. 最终您必须将月份名称从一种语言转换为另一种语言,如下例所示:

    A1包含JANFEBMAR...

    A2包含JÄNFEBMÄR...

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

编辑回复凯尔的评论:

除了德国(奥地利)的现场会立即认识到这个string是一个date的事实,让我们把问题分成咀嚼片。 你的datestring在A1中被假定

  1. 时间部分很容易:它是一个附加术语TIMEVALUE(RIGHT(A1;8))
  2. 分裂date,我们必须在dynamic的地方与分离者作战。 分隔符的位置可以通过find

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

    2b) =FIND("/";A1;4) …第二个分隔符,假定第一个数字可以只有1或2个字符而没有空白 – 或者我们必须用常数(2a)replace常数“4”+ 1

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

  3. 现在我们有很多东西准备构build我们的左边的中间和右边

    3a) =LEFT(A1;FIND("/";A1;1)-1)1st figure …(2a)-1的长度

    =MID(A1;FIND("/";A1;1)+1;FIND("/";A1;FIND("/";A1;1)+1)-FIND("/";A1;1)-1)第2图 …开始:=(2a)+1,num_Chars =(2c) – (2a)-1

    3c) =MID(A1;FIND("/";A1;FIND("/";A1;1)+1)+1;4)3rd figure … start:=(2c)+1, num_chars = 4 – 假设年份总是4位数。 对于第一个空白,更抽象的情况是(3b),其中(2c)是=FIND()

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

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

    4a)首先input= DATE(1; 2; 3)

    4b)用(3c)replace1,用(3b)replace2,用(3a)replace3 …不要复制前面的“=”

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

你看不到时间,只有date! ….请记住给一个自定义格式显示date和时间,即“DD.MM.YYYY hh:mm:ss”

好的…这个公式是绝对不可理解的,所以你可能想在(临时)字段/列中显示中间结果。

而且这个公式只有在inputstring严格格式化的情况下才会起作用。 它可以应付一些第一和第二个数字的空白,但从YYYY开始变得棘手。 然后需要包含其他的概念,比如在所有其他的=SUBSTITUTE(A1;" ";"")之前,通过=SUBSTITUTE(A1;" ";"")去掉所有的空白等。

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