2013-04-22 37 views
1

我接收到以下任務: 轉 「日/月/年爲hh:mm:ss」 的時間爲「YYYY。 mm.dd hh:mm「格式。格式化時間從DD/MM/YYYY HH:MM:SS到YYYY.MM.DD HH:MM

我希望一個簡單的格式(activecell.value,「yyyy.mm.dd hh:mm」)會有所幫助,但是。 在某些情況下,它可以工作。但是,在一些特殊情況下,它不會。 當這一天在01-12之間(可以與月份互換!),那麼它會在幾個月內混淆日子。 (可能因爲美國式的日期格式。)

例如,原來的文本字符串: 2013年4月6日09:00:00

預計: 2013年6月4日09:00

結果: 2013.04.06 09:00(日和月已交換)

我試圖通過格式化輸入來克服它,我給它一個「dd/mm/yyyy hh:mm:ss」自定義格式。沒有幫助,它仍然交換一天和一個月。

所以我沒有想法了,但正則表達式。日期格式總是相同的,所以只要移動字符串的部分就沒問題。 但是,我不知道這是如何工作和谷歌搜索帶來混亂的結果。

任何人都可以幫助我嗎? 當然,如果有更優雅的方式來做到這一點,那也是值得歡迎的。

+0

日期是如何進入工作表的?如果輸入錯誤,則會出現類似錯誤(英國和美國之間的混合)。我會建議先正確格式化。我從經驗中發現的一個指標是,當您放置過濾器並打開日期過濾器時,日期不會分組在一起。 – Jerry 2013-04-22 11:24:51

+0

我不是導入數據的人,所以我不知道它是如何完成的。我必須像這樣對它進行處理,對於這件事我不能做得太多。 – 2013-04-22 12:18:28

+0

好的,您是否嘗試過我之前提到的過濾器?我不知道如何問你,所以我得到了我正在尋找的迴應。你能確定哪些日期格式不正確嗎?我懷疑'好日期'是在dd/mm/yyyy hh:mm:ss'格式,而不好的日期是在'mm/dd/yyyy hh:mm:ss'格式。如果將所有文件格式設置爲「mm/dd/yyyy hh:mm:ss」,會發生什麼?所有的日期都變了嗎,還是隻有好的日期纔會改變? – Jerry 2013-04-22 13:15:37

回答

2

嘗試使用這種自定義格式:

yyyy/mm/dd h:mm;@ 

要進入它,用鼠標右鍵單擊單元格,選擇單元格格:

Format Cell

Number選項卡下

然後從列表框中選擇Custom。並在Type:文本框中輸入提供的格式。

Example

如果不起作用。你是*****絕對*****積極,04/06/2013 09:00:00是2013年4月6日,而不是2013年6月4日?

如果這仍然不起作用,並且您已驗證日期是否正確。

Sub ChangeDateFormat() 

Application.ScreenUpdating = False 

Dim CurrentCell As Range 
Dim LastRow As Long 
Dim RegEx As Object 
Set RegEx = CreateObject("vbscript.regexp") 
RegEx.Global = True 

LastRow = Range("A" & Rows.Count).End(xlUp).Row 'Get The Last Row in Column Change A as Needed 

For Each CurrentCell In Range("A1:A" & LastRow) ' Loop through all cells. Change Column as needed 

    If InStr(CurrentCell.Value, "/") <> 0 Then 'To make sure only convert non converted ones 

     RegEx.Pattern = "(\d{2})/(\d{2})/(\d{4}) (\d{2}):(\d{2}):(\d{2})" ' Seperate all parts of imported Data into groups 
     CurrentCell.Value = RegEx.Replace(CurrentCell.Value, "$3.$2.$1 $4:$5") ' Change order of groups and place into cell. 

    End If 

Next 

Application.ScreenUpdating = True 

End Sub 

*****注:*****這如果ALL日期值是dd/mm/yyyy hh:mm:ss如果他們不是你將不得不添加一些錯誤處理,並可能稍微修改代碼只會工作因爲它導致問題。

這也適用於其他文本中的日期。如果A1

This is a test 04/06/2013 09:00:00 Lets see what happens

那麼新值將是

This is a test 2013.06.04 09:00 Lets see what happens

+0

自定義格式化單元不會做任何事情,我自己也嘗試過它 我寫了一個宏來格式化單元格,在這裏:--- 'LastRow =如果單元格(i,9).NumberFormat <>「yyyy.mm.dd hh:mm」則; Ttime = 0; (i,9).Value; Cells(i,9).Value = Format(Ttime,「yyyy.mm.dd hh:mm」); End If; Next' --- I can'現在上傳圖片,所以這裏有兩個矛盾的例子: 輸入 - >結果| 25/04/2013 10:00:00 - > 2013.04.25 10:00 | 01/04/2013 00:00:00 - > 2013.01.04 00:00 – 2013-04-22 13:08:05

+0

如果你在單元格上使用'DATEVALUE',你會得到'#VALUE!'嗎? – user2140261 2013-04-22 13:47:09

+0

是的,與'TIMEVALUE'相同的結果。 – 2013-04-22 14:49:26

0

其簡單。 。 。只需按照步驟 選擇整個列或甚至需要的單元格 按右鍵單擊並選擇格式單元格選項,一個選項卡窗口將打開 從數字選項卡選擇日期,從區域設置下拉菜單中選擇英語(南非) 從給定的選項在類型中選擇你想要的反向格式。 。 。和你做:)

+0

選擇南非格式對文本沒有任何影響。 如果我再運行我的宏,它會再次產生相同的結果:( – 2013-04-22 11:51:08

0

如果月和日是在錯誤的地方,你可以使用"DATE(YEAR(A1),DAY(A1),MONTH(A1))",前提是該日期格式和"DATE(MID(A1,7,4),LEFT(A1,2),MID(A1,4,2))"如果它是文本格式

相關問題