使用VBA更改为日期格式时,Excel无法识别年份

时间:2013-09-30 07:37:27

标签: excel vba excel-vba

我无法更改为日期格式。我有包含不同日期的单元格,但并非所有日期都格式化为日期。其中一个是“yy-mm-dd”,例如“13-04-08”,但它被格式化为General。 我正在使用此代码:

xCell = Format(xCell, "yyyy-mm-dd")

问题是excel不能判断“13”或“08”是否是“yyyy”所以它不会改变任何东西。我该如何解决这个问题?在更改日期之前,我是否需要告诉excel哪些数字是一年,我该怎么做?它可以包含在Format方法中吗?

修改 我想我需要解释整个事情,因为问题似乎在其他地方。 包含日期的单元格从开始看起来像这样,格式为General:

13-05-06 A
13-05-21 A
...

我使用以下代码删除了不需要的“A”:

Sub rensa()

Dim Found As Range

For Each xCell In Range("D2:D999")
    If IsEmpty(xCell.Value) Then Exit For
        Set Found = xCell.Find(What:="A", LookIn:=xlValues, LookAt:=xlPart)
            If Found Is Nothing Then
            Else
                xCell.Value = Left(xCell.Value, Len(xCell.Value) - 1)
            End If
    Next xCell

End Sub

我已尝试使用这些代码将单元格格式设置为日期:

Range("D2:D999").NumberFormat = "yyyy-mm-dd"
Range("D2:D999").NumberFormat = "m/d/yyyy"

我也尝试在For循环中实现它们,如下所示:

Sub rensa()

Dim Found As Range

For Each xCell In Range("D2:D999")
If IsEmpty(xCell.Value) Then Exit For
    Set Found = xCell.Find(What:="A", LookIn:=xlValues, LookAt:=xlPart)
        If Found Is Nothing Then
            xCell.NumberFormat = "yyyy-mm-dd"
        Else
            xCell.Value = Left(xCell.Value, Len(xCell.Value) - 1)
            xCell.NumberFormat = "yyyy-mm-dd"
        End If
Next xCell

End Sub

但是这也不是我想要的。一切都使结果看起来像这样,仍然格式化为General:

13-05-06
13-05-21
...

所以A已经消失,但没有其他变化。

2 个答案:

答案 0 :(得分:1)

我刚刚在你的代码中添加了一些内容。请参阅以下带注释的行

Sub rensa()

Dim Found As Range
Dim xcell As Range
Dim date_val As Date

For Each xcell In Range("D1:D999")
    If IsEmpty(xcell.Value) Then Exit For
        Set Found = xcell.Find(What:="A", LookIn:=xlValues, LookAt:=xlPart)
            If Found Is Nothing Then
            Else
                xcell.Value = Left(xcell.Value, Len(xcell.Value) - 1)
                date_val = xcell.Value 'asign the value to date variable carrier
                xcell.Value = date_val 'return it to the cell
            End If
Next xcell

Range("D1:D999").NumberFormat = "yyyy-mm-dd" 'do the formatting

End Sub

希望这有效。

答案 1 :(得分:0)

相当简单的解决方案是使用Mid, Left, Right functions解析您的数据。但是,它并不像人们期望的那样有效,但可能会有所帮助。所以,代码可以如下:

xCell = "13-04-08"
xCell = Format(DateSerial(Left(xCell,2),mid(xCell,4,2),Right(xCell,2)),"yyyy-mm-dd")

因此得到2013-04-08

编辑要设置适当的单元格格式,请尝试以下操作之一:

Range("A1").NumberFormat = "yyyy-mm-dd"

Range("A1").NumberFormat = "m/d/yyyy"

Range("A1")在Excel工作表中引用您的单元格/范围。