从dd.mm.yyyy转换为dd / mm / yyyy

时间:2019-04-11 00:25:11

标签: excel vba

我当前正在使用Excel 2010,并且我有一列包含这种格式的日期(dd.mm.yyyy)。我想将点更改为斜杠(/)。我尝试使用rng.Cells(1, 6) = WorksheetFunction.Substitute(rng.Cells(1, 6), ". ", "/")

但是,当我这样做时,得到的结果与原始日期有所不同。例如,02.11.2011将变为11/02/2011。

包含(dd.mm.yyyy)的列为date格式

我可以知道为什么吗,或者还有另一种方法吗?

4 个答案:

答案 0 :(得分:0)

该列是否设置为日期格式?如果是这样,您可以尝试

rng.Cells(1, 6) = Format(CDate(rng.Cells(1, 6)), "dd/MM/yyyy")

答案 1 :(得分:0)

如果它是实际日期值,则使用NumberFormat

Range("B1").NumberFormat = "d/m/yyyy"
Range("B2").NumberFormat = "m/d/yyyy"
Range("B3").NumberFormat = "m-d-yyyy"

答案 2 :(得分:0)

我正在使用

splR = Split(oRange.Value, ".")
If UBound(splR) = 2 Then oRange.Value = Format(DateSerial(splR(2), splR(1), splR(0)), RegionalDateFormat) Else oRange.Value = oRange.Value

Function RegionalDateFormat(Optional outS As String)
    Dim DateOrder As String
    Dim DateSeparator As String

With Application
    DateSeparator = .International(xlDateSeparator)
    Select Case .International(xlDateOrder)
        Case Is = 0
            DateOrder = "mm" & DateSeparator & "dd" & DateSeparator & "yyyy"
        Case Is = 1
            DateOrder = "dd" & DateSeparator & "mm" & DateSeparator & "yyyy"
        Case Is = 2
            DateOrder = "yyyy" & DateSeparator & "mm" & DateSeparator & "dd"
        Case Else
            DateOrder = "Error"
    End Select


End With
If outS = "Sep" Then outputS = DateSeparator Else outputS = DateOrder
RegionalDateFormat = outputS

End Function

答案 3 :(得分:0)

让我们澄清一下,Excel电子表格本身没有“日期”数据类型。 Excel处理日期的方法是存储一个整数,您可以选择将其格式化为日期。因此,例如,43467是代表2019年1月2日的整数。(小数部分代表当天的时间,所以43467.333 ..代表2019年1月2日8:00。)

尝试输入日期,然后右键单击>“设置单元格格式”以将该单元格设置为数字格式,以观察我在说什么。

以相同的方式,可以使Excel使用相同的方法以所需的日期格式呈现该单元格:选择单元格>右键单击>“设置单元格格式”,选择“自定义”,然后输入自定义格式,例如dd.mm.yyyy。

一旦您看到它可行,那么剩下的任务就是从VBA中执行相同的操作,就像这样:

Range(“ B1”)。NumberFormat =“ dd.mm.yyyy”

...正如其他人所指出的。

现在,如果您最初尝试使Excel将日期单元格格式化为数字失败(它保持其日期显示),那么您在单元格中看到的日期实际上将存储为字符串,并且不能用作日期(例如执行日期算术)。因此,您需要决定如何进行操作-也许将这些字符串转换为“日期”(即:数字格式为日期)。