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

Mec*_*mer 5 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
[....]
Run Code Online (Sandbox Code Playgroud)

dji*_*kay 4

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

1. 格式化

您可以复制整个日期并将目标单元格格式设置为仅显示年份,而不是从源日期中提取年份。这样,您就可以保留原始日期信息,但只显示您感兴趣的部分。下面是一个将日期复制到"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
Run Code Online (Sandbox Code Playgroud)

2. 使用Year()功能

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

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
Run Code Online (Sandbox Code Playgroud)

这两个例子都很简单,但我希望它们能给你一个总体思路。我相信您可以根据您的要求进行调整。