Vba 使用子/函数将DD-MM-YY转换为DD-MM-YYYY

Vba 使用子/函数将DD-MM-YY转换为DD-MM-YYYY,vba,Vba,我收到了一份关于某项作业的某些来源的报名日期列表。 他们想让我用vba更改日期 问题是: 与导演给你的上一份作业一样,报名日期是“非正常”格式。主管希望将日期更改为“正常”丹麦格式“DD-MM-YYYY”。因此,您必须创建一个子/函数,将字段中的日期更改为“正确”格式。由于函数需要能够运行多次,因此在转换之前,应使用适当的选择语句检查日期是否为“非正常”格式 我附上了一张excel的图片 如果年份部分前只有2个字符,则此函数会在年份部分前添加一个20 Function DateConvert(B

我收到了一份关于某项作业的某些来源的报名日期列表。 他们想让我用vba更改日期 问题是:


与导演给你的上一份作业一样,报名日期是“非正常”格式。主管希望将日期更改为“正常”丹麦格式“DD-MM-YYYY”。因此,您必须创建一个子/函数,将字段中的日期更改为“正确”格式。由于函数需要能够运行多次,因此在转换之前,应使用适当的选择语句检查日期是否为“非正常”格式

我附上了一张excel的图片

如果年份部分前只有2个字符,则此函数会在年份部分前添加一个20

Function DateConvert(BtVal dt As String) As String
Dim parts As String()
parts = Split(dt, "-")
dd = parts(1)
mm = parts(2)
yy = parts(3)
DateConvert = dd & "-" & mm & "-" & IIf (Len(yy) = 2, "20" & yy, yy)
End Function

您可能希望扩展此逻辑,例如,65可以替换为1965而不是2065,但我将这部分留给您。

该函数将测试字符串是否与模式匹配。如果是,则返回格式化日期,否则返回同一单元格的值

Function GetDate(cell)
    With CreateObject("VBScript.RegExp")
        .Pattern = "^(\d{2})-(\d{2})-(\d{2})$"
        With .Execute(cell)
            If .Count > 0 Then
                With .Item(0)
                    GetDate = Format(DateSerial(.SubMatches(2), .SubMatches(1), .SubMatches(0)), "dd-MM-yyyy")
                End With
            Else
                GetDate = cell
            End If
        End With
    End With
End Function

恰当的选择陈述,很好的矛盾修饰法。日期肯定不是正常格式,它是字符串,不是日期。正确的方法是在字符串的某些部分使用DateSerial,用这些处理过的日期填充列,然后格式化列,使其以您喜欢的任何格式显示日期。在我看来,以文本格式将日期写入单元格是不可能的。如何排序或执行任何其他操作?这是牢房角落里的一个令人分心的绿色三角形。