我有一张excel工作簿,里面有几张。我需要做的是将年份从一张纸的列转移到另一张纸。我可以让专栏转移得很好,但我不能让它给我一个日期。
日期为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
[....]
答案 0 :(得分:3)
在我看来,(至少)有两种方法可以达到你想要的效果。
您可以复制整个日期并将目标单元格格式化为仅显示年份,而不是从源日期中提取年份。这样您就可以保留原始日期信息,但只显示您感兴趣的部分。以下是将日期从"Sheet1"/Cell(1,1)
复制到"Sheet2"/Cell(1,1)
并使用{{ 1}}将目标单元格格式设置为仅显示4位数年份部分:
NumberFormat
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
函数在这种情况下,您需要注意的是确保将目标单元格格式化为(整数)数字。如果将其格式化为日期,则结果将非常错误,因为它将使用年份值作为与1901年左右相关的日期偏移量。代码本身很简单。我使用前面的例子作为基础:
Year()
这两个例子都很简单,但我希望他们能给你一般的想法。我相信你可以根据自己的要求调整它们。
答案 1 :(得分:2)
根据您的代码,您已经在使用Year()函数。
但我认为存在语法错误:
Worksheets ("Results").Cells.(
还有一个额外的点。
答案 2 :(得分:0)
为了“在Excel中使用VBA从日期中提取年份”(回答您的逐字问题),您可以使用VBA的Year()
功能。替代方案是使用 DatePart 并为Interval参数指定 DateInterval.Year (re:http://msdn.microsoft.com/en-us/library/88k2aec8%28v=vs.90%29.aspx)
答案 3 :(得分:0)
您错误地使用Cells
功能,似乎:
Worksheets ("Results").Cells.(Row, StartColumn + I) = Worksheets("Program").Cells(RowTransfer, Year (TransferCol (5)))
^^^^^^^^^^^^^^^^^^^^^^^^
这样做是从TransferCol(5)
中提取年份并访问(RowTransfer, extracted year)
工作表的单元格值Program
。
您可能想要执行类似
的操作 Worksheets ("Results").Cells.(Row, StartColumn + I) = Year(TransferCol(5))
如果TransferCol
包含您的日期值。