自动填充等式VBA的错误

Sub Reflector() Dim i As Integer Dim endRow As Integer endRow = Cells(Rows.Count, "B").End(xlUp).Row Range("G2").Select For i = 2 To 40 Range("G" & i).Select If Range("H" & i).Value = "1" Or Range("H" & i).Value = "-1" Then ActiveCell.Formula = "=ROW(A1)" ActiveCell.AutoFill Destination:=Range(ActiveCell.Address & ":G" & endRow) End If Next i End Sub 

我想要的是macros检查H列中的值,并保持它没有-1或1的时间,然后在G列中logging该logging。如果它在列G中遇到1或-1的值,我想让它重新开始计数。

这个过程是我将检查列H和自动填充到最后一行数据和“反弹回来”检查下一个值,然后自动填充,如果它满足1或-1。

这是我得到的错误:

在这里输入图像说明

在这里输入图像说明

避免使用select和ActiveCell (除非绝对必要)。

试试这个代码:

 Sub Reflector() Dim ws as Worksheet Set ws = WOrksheets("Sheet1") 'change as needed Dim i As Integer Dim endRow As Integer endRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row For i = 2 To 40 If ws.Range("H" & i).Value = "1" Or ws.Range("H" & i).Value = "-1" Then With ws.Range("G" & i) .Formula = "=ROW(A1)" .AutoFill Destination:=ws.Range(ws.Range("G"&i),ws.Range("G" & endRow)) End With End If Next i End Sub 

UPDATE

对@ ScottCraner来说,这一点代码也可以工作,而且更容易阅读/维护。

 Dim ws As Worksheet Set ws = Worksheets("Sheet1") 'change as needed Dim endRow As Long endRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row With ws.Range("G2:G" & endRow) .FormulaR1C1 = "=IF(OR(RC[1]=1,RC[1]=-1),1,R[-1]C+1)" End With 

testing代码的屏幕截图:

在这里输入图像说明