2014-05-08 48 views
0

我想製作這個簡單的代碼,但是我沒有找到任何解決方案。可變範圍的SUMIF

我有一個循環迭代我的工作表的所有行,併爲每一次迭代我想做一個sumif,但範圍是可變的。

,所以我想是這樣的:

Dim row,MaxColumn as Integer 
MaxColumn = 5 
For row= 1 to 5 
ActiveSheet.Cells(row, MaxColumn + 1).Select 
ActiveCell.Formula = "=SUMIF("B2:D(here I want a variable D1 to 5 range with row variable),""=1"")" 

next row 

我不知道如何完成這一點。

我知道我可以用它來選擇一個變量的範圍,但是我不能在SUMIF上使用它。

ActiveSheet.Range("B" & row & ":D" & row) 
+0

改變_same_ cell的公式的5倍是什麼點?如果您在其他地方更改活動單元格,請向我們展示更多代碼.. –

+0

我省略了一些部分以便於理解我想要的內容 –

+0

** 1)** [如何避免使用Select/Active語句](http:// stackoverflow .com/questions/10714251/excel-macro-avoid-using-select)** 2)** Dim行,MaxColumn as Integer變量'row'的類型爲'Variant'。將其更改爲「Dim row as Integer,MaxColumn as Integer' ** 3)**可以在整個範圍內應用沒有循環的公式:範圍(A1:A5).Formula =」= SUMIF(B1:D1,1)「 '和Excel會自動調整它爲每個細胞/行 –

回答

2

你可以得到一系列這樣Range("B2:D2").Address
這將產生一個絕對範圍的地址$B$2:$D$2

你可以給它傳遞真/假以獲得相對地址Range("B2:D2").Address(False, False)
其產生範圍B2:D2

下面是一個例子:

Dim TotalRows As Long 
Dim i As Long 

' Get the total number of rows in the current sheet 
TotalRows = ActiveSheet.UsedRange.Rows.Count 

' Iterate through all rows 
For i = 1 To TotalRows 
    ' Set the current cells formula range to Bi:Di where i = the current row 
    Range("A" & i).Formula = "=SUMIF(" & Range("B" & i & ":D" & i).Address(False, False) & ", 1)" 
Next 

或者你可以設置一個範圍的公式是這樣的:
Range("A1:A4").Formula = "=SUMIF(B1:D1,1)"

Excel將基於行自動爲您增加的範圍內。

SUMIF Example

+0

謝謝,這讓我瘋狂 –