在Excel VBA中将大量数值转换为英国日期格式

时间:2019-05-08 09:25:38

标签: excel vba

我有一个具有成千上万个日期的工作表,格式如下:-

31.01.2018(因此,dd.mm.yyyy)

每个单元格的格式均为“常规”。我需要将这些转换为英国日期格式。 为此,我正在使用:-

With ThisWorkbook.Worksheets("Report")
    For i = 2 To Lastrow
        DateString = .Range("J" & i).Value
        Year = Right(DateString , 4)
        Month = Mid(DateString , 4, 2)
        Day = Left(DateString , 2)

        With .Range("J" & i)
            .Value = CDate(Day & "/" & Month & "/" & Year)
            .NumberFormat = "dd/mm/yyyy"
        End With
    Next i
End With

这需要花费相当长的时间,我想知道是否存在更有效的日期转换方法?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,但是我没有错过任何内容,则无需VBA即可。 只需选择J列,然后将.替换为/

如果您仍要使用VBA进行操作,则可以执行以下操作:

Sub test()
Dim sht As Worksheet
Dim rng As Range
Set sht = ThisWorkbook.Worksheets("Report")
Set rng = sht.Columns("J")
rng.Replace what:=".", replacement:="/"
End Sub

执行大约一万个日期只需不到一秒钟的时间。

编辑:

完成后,值将被excel识别为日期。 这些日期的格式可以设置为欧洲日期。选择列J并按CTRL+1,在Number标签中的Category下,选择Date并将其设置为欧洲格式。

enter image description here

或者直接在上面的代码中添加以下行:

rng.NumberFormat = "dd/mm/yyyy"

答案 1 :(得分:0)

我能够使用此处提供的答案来解决这个问题:-

https://stackoverflow.com/a/30609676/1936588

更改

.TextToColumns Destination:=.Cells(1), DataType:=xlFixedWidth, FieldInfo:=Array(0, xlYMDFormat)

收件人

.TextToColumns Destination:=.Cells(1), DataType:=xlFixedWidth, FieldInfo:=Array(0, xlDMYFormat)
相关问题