在VBA中使用sum ifs函数在excel中填充2维范围

基于商店和地点的利润表中的数据。 在一列中寻找具有位置的matrix并连续存储。 对于每个位置和商店,它将返回一个值,该值是在该位置的所有商店(可能在特定位置有多个商店)的利润总和。

这将是Excel的function:

= SUMIFS(Sheet 2中$ C $ 2:$ C $ 6 Sheet 2中$ A $ 2:$ A $ 6中,工作表Sheet $ A5,Sheet 2中$ B $ 2:!!$ B $ 6 Sheet 1中B $ 4)

尝试一下,

with sheets("Sheet1") with .range("B5:Z99") .formula = "=SUMIFS(Sheet2!$C$2:$C$6, Sheet2!$A$2:$A$6, Sheet1!$A5, Sheet2!$B$2:$B$6, Sheet1!B$4)" .value = .value end with end with 

实质上,将公式写入单元格块,然后将公式结果恢复为其值。

编辑dynamic最后一行:

 dim lr as long lr = Sheets("Sheet2").cells(rows.count, 3).end(xlup).row 

那么公式分配将是:

 .formula = "=SUMIFS(Sheet2!$C$2:$C$" & lr & ", Sheet2!$A$2:$A$" & lr & ", Sheet1!$A5, Sheet2!$B$2:$B$" & lr & ", Sheet1!B$4)" 

编辑:命名范围:

如果移动到使用命名范围的公式来定义正在检查的数据范围,请使用相同的MATCH公式来定义不同列的限制。

示例:在上面的SUMIFS中,可以使用Sheet2的列A,B和C的命名范围。让我们调用命名范围ws2colA,ws2colBws2colC 。 我们知道我们正在对列C进行求和,所以使用列C中最后一个数字的行来定义每个列的范围。

 ws2colA - Applies to: =Sheet2!$A$2:INDEX(Sheet2!$A:$A, MATCH(1e99, Sheet2!$C:$C)) ws2colB - Applies to: =Sheet2!$B$2:INDEX(Sheet2!$B:$B, MATCH(1e99, Sheet2!$C:$C)) ws2colC - Applies to: =Sheet2!$C$2:INDEX(Sheet2!$C:$C, MATCH(1e99, Sheet2!$C:$C)) 

公式分配变成:

 .formula = "=SUMIFS(ws2colC, ws2colA, Sheet1!$A5, ws2colB, Sheet1!B$4)" 

使用相同的公式来定义每个命名范围列的范围将防止SUMIFS中的不匹配的范围引用。