2013-04-22 61 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))"如果它是文本格式

相关问题