Vba 从相邻列中提取年份

Vba 从相邻列中提取年份,vba,excel,extract,Vba,Excel,Extract,我使用了4列I(文件日期)、J(文件年份)、K(决议日期)、L(决议年份)。到目前为止,我有以下不起作用的代码 Thisworkbook.Sheets(3).FormulaR1C1 = "=YEAR(RC[-1])" Range("J2").Select ActiveCell.FormulaR1C1 = "=IF(ISBLANK(RC[-1]),"""",YEAR(RC[-1]))" Range("J2").Select 日期已经给出了,所以我所要做的就是从第I列到第I列,从第K列到第L列,从

我使用了4列I(文件日期)、J(文件年份)、K(决议日期)、L(决议年份)。到目前为止,我有以下不起作用的代码

Thisworkbook.Sheets(3).FormulaR1C1 = "=YEAR(RC[-1])"
Range("J2").Select
ActiveCell.FormulaR1C1 = "=IF(ISBLANK(RC[-1]),"""",YEAR(RC[-1]))"
Range("J2").Select
日期已经给出了,所以我所要做的就是从第I列到第I列,从第K列到第L列,从第2行到最后一行,这是由不同的程序预先确定的

Dim lastRow As Long
Dim rng As Range

Set rng = ThisWorkbook.Sheets(2).Cells

lastRow = rng.Find(What:="*", After:=rng.Cells(1), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row

如果您有任何帮助,我们将不胜感激。

您可以使用工作表公式,无需VBA

在J列中,输入以下公式,然后向下复制

=YEAR(I:I)
VBA代码:

要使用所有行上的VBA执行此操作,请尝试以下操作:

Dim lLastRow As Long

lLastRow = Range("I" & ActiveSheet.Rows.Count).End(xlUp).Row

Range("J1:J" & lLastRow).Formula = "=IF(ISBLANK(I:I),"""",YEAR(I:I))"

希望这对您有所帮助

您是在寻找完整的代码还是仅仅是用于提取年份的语句?如果将以下行集成到现有宏中,则该行应该可用

activecell.value=Year(activecell.offset(0,-1).value)

你试过什么?您需要向我们展示一些示例数据,以及您尝试过的一些数据,然后我们可以提供帮助。为什么您要求使用宏/vba,而一个非常简单的Excel公式就可以完成这项工作?我知道可以使用简单的=年()公式,但由于当我提取年份时,整个File_Date列的格式为Date,它将提取像“1905”这样奇怪的年份。此外,我正试图将其自动化,因为它具有200多个文件的重复性。谢谢。我在回答中添加了一个VBA解决方案。这不意味着只有活动单元格才会使用该代码吗?@BLkrn:是的,所以您需要将该代码应用于整个范围。。或者使用一个你抄袭下来的公式谢谢,我知道,但由于它的重复性,我想把它作为macro@BLkrn:我添加了一个VBA解决方案,该解决方案将在填充所有行时对它们起作用