格式化时间从dd / mm / yyyy hh:mm:ss到yyyy.mm.dd hh:mm

时间:2013-04-22 11:13:10

标签: excel excel-vba vba

我收到了以下任务: 将“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”自定义格式。没有帮助,它仍然交换日和月。

所以我不再有任何想法,而是正则表达式。日期格式总是相同的,所以只需移动字符串的部分即可。 但是,我不知道它是如何工作的,谷歌搜索会带来令人困惑的结果。

任何人都可以帮助我吗? 当然,如果有一种更优雅的方式,那也是受欢迎的。

3 个答案:

答案 0 :(得分: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

*****注意:*****这仅在所有日期值为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))"(如果是文本格式)