2013-09-30 96 views
0

我无法更改为日期格式。我有包含不同日期的单元格,但并非所有日期都格式化为日期。其中之一是“yy-mm-dd”,例如“13-04-08”,但它被格式化为常规。 我使用这个代码:使用VBA更改为日期格式时Excel不识别年

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

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

编辑: 我觉得我有必要解释了整个事情的问题,看来到别的地方打好。 包含日期的单元格是这样的,从开始,被格式化为一个一般:

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 

但这并没有工作,因为我想要的。一切都使结果看起来像这样,仍然格式化为一般:

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

所以,A不见了,但没有别的改变。

+0

您需要使用正则表达式来告诉Excel,它是日期编号和年份编号。 这里是相对于您的问题的答案: http://stackoverflow.com/a/7106594/516245 – zur4ik

+1

问题的真实描述似乎是单元格数据不是日期,而是字符串。 –

+0

@iDevelop你是对的,细胞数据不是从一开始的日期。也许标题应该说“...当改变日期格式”? – andysando

回答

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 

希望这项工程。

+0

谢谢,它工作得很好! – andysando

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工作表。

+1

输出仍然是13-04-08,所以它似乎没有工作。 – andysando

+0

如果您在单元格中看到不正确的输出,那么您需要将“单元格格式”更改为“长日期”之类的内容。在VBA中肯定有'2013-04-08'。或者,您可以尝试在'format function'之前以这种方式添加''':'xCell =''“&Format(...' –

+0

如何更改单元格格式与VBA? – andysando