我收到了以下任务: 将“dd / mm / yyyy hh:mm:ss”时间改为“yyyy.mm.dd hh:mm”格式。
我希望一个简单的格式(activecell.value,“yyyy.mm.dd hh:mm”)会有所帮助,但是。 在某些情况下,它有效。但是,在某些特殊情况下,它没有。 当这一天在01-12之间(可与月份互换!),然后它会使几个月的日子变得混乱。 (可能是因为美式日期格式。)
例如,原始文本字符串: 04/06/2013 09:00:00
预期: 2013.06.04 09:00
结果: 2013.04.06 09:00(交换日期和月份)
我试图通过格式化输入来克服它,我给它一个“dd / mm / yyyy hh:mm:ss”自定义格式。没有帮助,它仍然交换日和月。
所以我不再有任何想法,而是正则表达式。日期格式总是相同的,所以只需移动字符串的部分即可。 但是,我不知道它是如何工作的,谷歌搜索会带来令人困惑的结果。
任何人都可以帮助我吗? 当然,如果有一种更优雅的方式,那也是受欢迎的。
答案 0 :(得分:2)
尝试使用此自定义格式:
yyyy/mm/dd h:mm;@
要输入它,请右键单击单元格,然后选择格式化单元格:
然后在Number
标签下,从列表框中选择Custom
。并在Type:
文本框中输入提供的格式。
如果这不起作用。你是*****绝对*****积极的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
*****注意:*****这仅在所有日期值为dd/mm/yyyy hh:mm:ss
时才有效,如果不是,则必须添加一些错误处理和可能会稍微修改代码,因为 WILL 会导致问题。
这也适用于其他文本内的日期。如果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
答案 1 :(得分:0)
答案 2 :(得分:0)
如果月份和日期位置错误,您可以使用"DATE(YEAR(A1),DAY(A1),MONTH(A1))"
(如果是日期格式),"DATE(MID(A1,7,4),LEFT(A1,2),MID(A1,4,2))"
(如果是文本格式)