Vba 如何使用宏编辑excel中的日期列,使其成为通用格式;年月日;

Vba 如何使用宏编辑excel中的日期列,使其成为通用格式;年月日;,vba,excel,date,macros,Vba,Excel,Date,Macros,这个问题与日期和时间有关。我试图在excel中创建一个宏来编辑日期列,以将以前输入的所有日期更改为通用格式“dd/mm/yyyy”。但是,如果使用“.”或“-”分隔日期,则不会将其标识为日期。尝试将分隔符替换为“/”,然后从右向左考虑日期。 我尝试的宏如下所示: Sub Date_Edit() Columns("C:C").Select Selection.Insert Shift:=xlToRight Sheets(1).Range("B1:B1000").Replace ".", "/"

这个问题与日期和时间有关。我试图在excel中创建一个宏来编辑日期列,以将以前输入的所有日期更改为通用格式“dd/mm/yyyy”。但是,如果使用“.”或“-”分隔日期,则不会将其标识为日期。尝试将分隔符替换为“/”,然后从右向左考虑日期。 我尝试的宏如下所示:

Sub Date_Edit() 

Columns("C:C").Select
Selection.Insert Shift:=xlToRight
Sheets(1).Range("B1:B1000").Replace ".", "/"

For i = 2 To 1000                                        
    d = Cells(i, 2).Value
    a = CDate(d)
    Cells(i, 3) = FormatDateTime(d, 2)
Next i

Columns("C:C").Select
Selection.NumberFormat = "dd/mm/yyyy"  

End Sub

我认为问题在于:

d = Cells(i, 2).Value ' here you set d as the variable
a = CDate(d)  ' at this point a is the current variable
Cells(i, 3) = FormatDateTime(d, 2) ' and here you use d again. 
我认为您需要在FormatDateTime中将
d
替换为
a

CDate()将值转换为日期。

FormateDateTime()需要一个日期值才能运行
d
不是日期值。

问题在于标准格式是
“mm/dd/yyyy”
而不是
“dd/mm/yyyy”
。当您尝试将
“dd/mm/yyyy”
转换为标准日期值时,您必须交换日期和月份

此函数将仅处理日期值

Function FixDDMMYYYY(DateString As String) As Date
    Dim arDateParts() As String

    If InStr(DateString, ".") Then
        arDateParts = Split(DateString, ".")
    ElseIf InStr(DateString, "-") Then
        arDateParts = Split(DateString, "-")
    End If

    On Error Resume Next
        FixDDMMYYYY = DateSerial(arDateParts(2), arDateParts(1), arDateParts(0))
    On Error GoTo 0
End Function

建议不要使用
Select
,因为它会减慢子例程的速度。不要使用
列(“C:C”)。选择
Selection.NumberFormat=“dd/mm/yyyy”
您可以只使用:
列(“C:C”)。NumberFormat=“dd/mm/yyyy”
类似地,您可以只使用
列(“C:C”)。在代码的第一行插入Shift:=xlToRight