2011-09-08 207 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

相關問題