将公式向下复制x行数

我对此感到茫然,需要一些帮助。 我已经潜伏在答案,并一起Frankensteined一些代码macros,但它只是不工作。

这是我到目前为止的一部分:

With ActiveSheet Firstrow = 1 Lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row For lrow = Lastrow To Firstrow Step -1 With .Cells(lrow, "G") Range("G1").Select ActiveCell.FormulaR1C1 = "=IF(ISNUMBER(RC[1]),RC[1],RC[-1])" End With Next lrow End With 

在此之前,我有一个非常类似的代码块,从我正在导入的文本文件中删除废话,它可以完美地通过所有的行数。 当我用这个公式运行同样的东西时,它只会把公式放在G1中,而不会循环到表格的其余部分。 我已经试过这个,它的工作原理,但通过所有百万行加以复制:

 ActiveCell.FormulaR1C1 = "=IF(ISNUMBER(RC[1]),RC[1],RC[-1])" Selection.AutoFill Destination:=Range("G:G") 

我试过这个,然后运行相同的代码,摆脱文本文件废话,但我得到一个错误“如果没有块如果”。

要在一个单元格中填充公式,您需要在公式中循环; 不要依靠ActiveCell属性 。

 With ActiveSheet Firstrow = 1 Lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row For lrow = Lastrow To Firstrow Step -1 .Cells(lrow, "G").FormulaR1C1 = "=IF(ISNUMBER(RC[1]),RC[1],RC[-1])" Next lrow End With 

但是可以通过将公式放入所有的单元格来加快速度。

 With ActiveSheet Firstrow = 1 Lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row With .Range(.Cells(Firstrow, "G"), .Cells(Lastrow, "G")) .FormulaR1C1 = "=IF(ISNUMBER(RC[1]),RC[1],RC[-1])" End With End With 

请参阅如何避免使用Excel中的selectVBAmacros来获取更多的方法来摆脱依靠select和activate来实现您的目标。

另一个版本,根据标题dynamicselect列。 包括评论。

 Dim row As Range Dim cell As Range Static value As Integer 'Set row numbers 'Find the starting row. Located using Title of column "Start" plus whatever number of rows. Dim RowStart As Long Set FindRow = Range("A:A").Find(What:="Start", LookIn:=xlValues) RowStart = FindRow.row + 1 'End of the range. Located using a "finished" cell Dim RowFinish As Long Set FindRow = Range("A:A").Find(What:="Finished", LookIn:=xlValues) RowFinish = FindRow.row - 1 'Set range - Goes Cells(Rownumber, Columnnumber) 'Simply ammend RowStart and RowFinish to change which rows you want. ' In your case you need to change the second column number to paste in horizontally. Set rng = Range(Cells(RowStart, 1), Cells(RowFinish, 1)) 'Start the counter from the starting row. value = RowStart For Each row In rng.Rows For Each cell In row.Cells 'Insert relevant formula into each cell in range. cell.Formula = _ "=IF(ISNUMBER(RC[1]),RC[1],RC[-1])" 'Increment row variable. value = value + 1 Next cell Next row