在VBA中将XX转换为20XX文本日期

时间:2016-10-04 11:50:03

标签: excel vba excel-vba

我有这种格式的单元格: 1 /二月/ 12 我将单元格格式化为日期xx / xx / xxxx,如下所示:

Columns("A:A").Select
Selection.Replace What:="-", Replacement:="/", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
Selection.NumberFormat = "m/d/yyyy"

但是当我执行它时,Excel会显示一条警告:“文本日期为2位数年份”并向我显示一些选项,我想要一个说“在VBA中将XX转换为20XX文本日期”。发生这种情况是因为年份是12年,它询问是1912年还是2012年。 我希望我的vba宏说“它是2012”。

某种方式?如果我手动“替换”(不是在vba上),2012会自动更新,但我需要自动更新。

感谢。

编辑:

最后用这个解决了:

 'Pasa los años XX a 20XX
Private Sub FormatAny()
Dim i As Integer
i = 1
For Each celda In Range(Range("A1"), Cells(ActiveSheet.Rows.Count, 1))
    If Len(celda.Text) > 4 Then
        Dim divTexto: divTexto = Split(celda.Text, "/")
        If UBound(divTexto) - LBound(divTexto) = 2 Then
            If Len(divTexto(UBound(divTexto))) = 2 Then
                divTexto(UBound(divTexto)) = "20" & divTexto(UBound(divTexto))
                celda = Join(divTexto, "/")
                Range("A" & i).Select
                ActiveCell.FormulaR1C1 = celda
            End If
        End If
    End If
i = i + 1
If (i = 32676) Then
    Exit For
End If
Next
End Sub

1 个答案:

答案 0 :(得分:0)

for each c in range(range("A1"), cells(activesheet.rows.count,1))
dim s$:s=c.text
if len(s)>4 then

dim a : a=split(s,"/")
if ubound(a)-lbound(a) = 2 then 
if len(a(ubound(a)))=2 then 
a(a(ubound(a)))="20" & a(a(ubound(a)))
c=join(a,"/")
' or !     c=cdate(join(a,"/"))
end if
end if
end if
next