在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 )
您错误地使用了Cells
function,看来:
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值。