我刚刚在网站上注册,我确信我可以在下面的问题上得到一些帮助(我不是VBA的专家)..
简单地说,我正在做一个基于2个参数(列A和列G)计算总量(在第I列中,每行)的宏。我使用的是SUMIFS函数,它对一个单元格很有用。但是,我想为每一行自动化它,这对我来说变得棘手......
以下是适用于单元格I2的代码:
Sub quantity_aggregated()
Dim sht As Worksheet, LastRow As Long, i As Integer
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
Set sht = ThisWorkbook.Worksheets("JDE_Greece")
Range("I2").Formula = "=SUMIFS(H:H,G:G,G2,A:A,A2)"
我希望保持这种方式但是要集成一个For,从第2行开始并在最后一个填充的行结束。
我想(并尝试过)下面的一些代码,3个不同的(结尾是相同的,递增i并关闭宏):
For i = 2 To LastRow
'Range("I2").Formula = "=SUMIFS(H:H,G:G,Range(i,7),A:A,Range(i,1)"''
'Range(i, 9).Value = Application.WorksheetFunction.SumIfs(Range("H:H"), Range("G:G"), Range(i, 7), Range("A:A"), Range(i, 1))'
'Cells(i, 9).FormulaR1C1 = "=SUMIFS(H:H,G:G, "'
Next i
End Sub
我理解这个过程,但对于每一个,对象全局失败的方法范围(错误1004)"弹出来的。我确定它是关于定义应用程序,对象或相关内容但无法解决的问题。
有没有人有任何想法?这真的很棒:)
提前多多感谢,
答案 0 :(得分:1)
您只需将公式应用于整个范围I
即可。由于您对A2
和G2
的引用为" relative" ,因此该公式将系统地针对该范围内的每一行进行调整。
Dim sht As Worksheet, LastRow As Long
Set sht = ThisWorkbook.Worksheets("JDE_Greece")
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
sht.Range("I2:I" & LastRow).Formula = "=SUMIFS(H:H,G:G,G2,A:A,A2)"
如果您想使用循环"进行练习",
For i = 2 To LastRow
sht.Range("I" & i).Formula = "=SUMIFS(H:H, G:G, G" & i & ", A:A, A" & i & ")"
Next i
但请注意,这正是第一种形式幕后发生的事情。