2015-07-05 33 views
1

利潤基於商店和位置的工作表中的數據。尋找在一列中有位置的矩陣並連續存儲。對於每個地點和商店,它將返回一個值,即該地點所有商店(可能有多個商店位於特定位置)的利潤總和。在VBA中使用sum ifs函數在Excel中填充2維範圍

這將是Excel函數:

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

回答

1

試着這麼做,

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 

本質,寫公式到單元塊中,則公式結果返回到它們的值。

編輯動態最後一行:

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 formula來定義不同列的限制。

例子:在上面的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不匹配的範圍的引用。

+0

這有效,但是你對於我的源數據大小是動態的事實有何建議。例如:Sheet2!$ C $ 2:$ C $&lastrow&謝謝你的幫助! – Guenzet

+0

看我上面的編輯,以適應動態的最後一行。 [SUMIFS函數](https://support.office.com/en-us/article/SUMIFS-function-9DD6179E-CCED-41DD-AC38-08FDF5B929E5)也可以使用全列參考,不會有過度的計算滯後,如果沒有低於所引用的單元格的值將會干擾。 – Jeeped

+0

謝謝你完美的作品。 – Guenzet