从Excel中使用VBA从日期中提取年份

时间:2014-07-14 12:59:47

标签: excel vba excel-vba

我有一张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
[....]

4 个答案:

答案 0 :(得分:3)

在我看来,(至少)有两种方法可以达到你想要的效果。

1。格式化

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

NumberFormat

2。使用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包含您的日期值。