2017-06-13 94 views
0

我刚刚注册的网站上,我敢肯定,我可以得到以下问题的一些帮助(我不是在VBA专家)..VBA - SUMIFS - 递增行 - 错误1004

简单地说,我正在做一个宏,它根据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)“。我确定这是关于定义应用程序,对象或相关内容但不能解决的问题。

有没有人有任何想法?这将是真正伟大的:)

非常感谢提前,

回答

1

您可以将公式简单地适用于整个范围I。由于您对A2G2的引用是“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 

但是请注意,这恰恰是在第一种形式的幕后发生了什么。

+0

嗨, 事实上,这个工作,它肯定更快......在这个循环上花了很多时间,我几乎忘记了简单的事情。谢谢。 但是,有什么机会,你有任何线索为什么这个循环不起作用?如果我想插入一个循环(我想练习),那么简单的代码会是什么样子。 感谢您的时间 – Jeofbist3

+0

“@ Jeofbist3带循环公式将被组成为'”= SUMIFS(H:H,G:G,G“&i&”,A:A,A“&i&”) “' –

+0

不错!!非常感谢:) – Jeofbist3