在Excel中使用VBA提取年份

我有一个Excel工作簿几张。 我需要做的是将年份从一张表格的一列转移到另一张表格。 我可以把列转移到罚款,但我不能让它给我只是date。

date格式为dd-mon-yy (例如14-Jul-14 )。 我需要的是在yyyy (例如2014 )。 任何援助将是伟大的。

我试图的代码是这样的,但它不工作。

 [...] For I=5 to 5 If Not TransferCol (5) = 0 Then Worksheets ("Results").Cells.(Row, StartColumn + I) = Worksheets("Program").Cells(RowTransfer, Year (TransferCol (5))) Exit Do End If Next [....] 

在我看来,至less有两种方法可以实现你想要的。

1.格式化

不是从源date中提取年份,而是可以复制整个date并格式化目标单元格以仅显示年份。 这样你就可以保留原始的date信息,但只显示你感兴趣的部分。下面是一个从"Sheet1"/Cell(1,1)复制到"Sheet2"/Cell(1,1)的例子。并使用NumberFormat将目标单元格格式设置为仅显示4位年份部分:

 Public Sub test1() Dim rSrc As Range Dim rDst As Range Set rSrc = Sheets("Sheet1").Cells(1, 1) Set rDst = Sheets("Sheet2").Cells(1, 1) rDst = rSrc rDst.NumberFormat = "yyyy" End Sub 

2.使用Year()函数

在这种情况下需要注意的是确保目标单元格被格式化为(整数)数字。 如果将其格式化为date,则结果将是非常错误的,因为它将使用年份值作为从1901年左右开始的date偏移量。 代码本身很简单。 我使用前面的例子作为基础:

 Public Sub test2() Dim rSrc As Range Dim rDst As Range Set rSrc = Sheets("Sheet1").Cells(1, 1) Set rDst = Sheets("Sheet2").Cells(1, 1) rDst = Year(rSrc) End Sub 

这两个例子都是简单的,但我希望他们给你一个总的想法。 我相信你可以适应你的要求。

根据你的代码,你已经使用了Year()函数。

但我认为有一个语法错误:

 Worksheets ("Results").Cells.( 

还有一个额外的点。

为了“在Excel中使用VBA提取年份”(回答您的逐字问题),您可以使用VBA的Year()函数。 替代方法将使用DatePart和Interval参数指定DateInterval.Year回复 : http : //msdn.microsoft.com/en-us/library/88k2aec8%28v=vs.90%29.aspx )

您错误地使用了Cellsfunction,看来:

 Worksheets ("Results").Cells.(Row, StartColumn + I) = Worksheets("Program").Cells(RowTransfer, Year (TransferCol (5))) ^^^^^^^^^^^^^^^^^^^^^^^^ 

这是从TransferCol(5) (RowTransfer, extracted year)并访问Program工作表的单元格值(RowTransfer, extracted year)

你可能想要做类似的事情

  Worksheets ("Results").Cells.(Row, StartColumn + I) = Year(TransferCol(5)) 

如果TransferCol包含您的date值。