Excel VBA自动填充公式的错误

Excel VBA自动填充公式的错误,excel,vba,Excel,Vba,我希望宏检查H列中的值,并记录它没有-1或-1的次数,然后将该记录写入G列。如果它在G列中遇到1或-1的值,我希望它在那里重新开始计数 过程是,我将检查H列并自动填充到最后一行数据,然后“反弹”检查下一个值,如果它满足1或-1,则再次自动填充 以下是我得到的错误: (除非绝对必要) 请尝试以下代码: Sub Reflector() Dim i As Integer Dim endRow As Integer endRow = Cells(Rows.Count, "B").End(xlUp).

我希望宏检查H列中的值,并记录它没有-1或-1的次数,然后将该记录写入G列。如果它在G列中遇到1或-1的值,我希望它在那里重新开始计数

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

以下是我得到的错误:

(除非绝对必要)

请尝试以下代码:

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
更新

就@ScottCraner而言,这段代码也可以工作,并且更易于阅读/维护

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
已测试代码的屏幕截图:


为什么不使用公式<代码>=IF(或(H2=1,H2=-1),1,G1+1)此逻辑将在稍后用于更复杂的公式。第(A1)行是一个保留公式。此逻辑将在稍后用于更复杂的公式。在循环中多次使用复杂公式自动填充整个范围的想法看起来不是一个好方法。对我来说,这是XY问题。嗨,斯科特,谢谢你的回复。还是给我#REF!对于那些减去最后一个的单元格,请参见我的结果。这就是我在我的答案中运行代码时得到的结果。我在一个全新的电子表格上用G列和H列中的数据进行了尝试,但得到了不同的结果。你的代码似乎是正确的,但我不明白为什么我会收到这些#REF!结果。添加更新picture@AltoidsBenefitsH-请参阅我答案中的第二段代码。我对VBA编程还是新手,跨版本的代码有问题吗?新代码和原始代码的性能似乎不太好。。新代码上升到第一行并开始运行。
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