2016-06-09 54 views
0

我通過Excel VBA中試圖SUMIF函數,但我得到「#VALUE」錯誤。SUMIF函數在VBA和如何使用動態範圍式

Sub xd() 
R_lastrow = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row 
R_lastcolumn = Sheets(1).Cells(1, Columns.Count).End(xlToLeft).Column 

o_lastrow = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row 
o_lastcolumn = Sheets(2).Cells(1, Columns.Count).End(xlToLeft).Column 

For k = 2 To o_lastrow 
    For j = 2 To o_lastcolumn 
Sheets("Sheet2").Cells(k, j).Value = Sheets("Sheet2").Evaluate("SUMIF(Sheet1!&range(cells(2,R_lastrow),cells(2,R_lastcolumn)),range(1,j),Sheet1!&range(cells(j,R_lastrow))") 
    Next j 
Next k 
End Sub 

可否請你建議我在哪裏,我錯了

+0

我建議你先DESCR ibe你正在嘗試做什麼。 (「Sheet2」)。Cells(k,j).Value = Sheets(「Sheet2」)。Evaluate(「SUMIF(Sheet1!&range(cells(2,R_lastrow),cells(2,R_lastcolumn)) ,範圍(1,j),Sheet1!&range(單元格(j,R_lastrow))「) 應該是:Sheets(」Sheet2「)。Cells(k,j).Value = Sheets(」Sheet2「)。Evaluate 「SUMIF(Sheet1!)&range(cells(2,R_lastrow)&」,「&cells(2,R_lastcolumn))&​​」,「&range(1,j),Sheet1!&range(cells(j,R_lastrow)) ) – jkpieterse

+0

在我的工作簿中,我列了'a'列和'b'列到'd'列明年銷售總額的項目列表。 而在sheet2中,我只在列'a'和列' b'到'd'列(頭)。在sumif函數的幫助下,通過使用vba代碼求和值。 –

+0

我試圖在sumif函數中使用動態範圍 –

回答

1

您需要的地址範圍代入公式

未經檢驗:

Sub xd() 

    Const f As String = "SUMIF(Sheet1!<r1>,<r2>,Sheet1!<r3>)" 

    R_lastrow = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row 
    R_lastcolumn = Sheets(1).Cells(1, Columns.Count).End(xlToLeft).Column 

    o_lastrow = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row 
    o_lastcolumn = Sheets(2).Cells(1, Columns.Count).End(xlToLeft).Column 

    f1 = Replace(f, "<r1>", Range(Cells(2, R_lastrow), _ 
            Cells(2, R_lastcolumn)).Address(False, False)) 

    For k = 2 To o_lastrow 
     For j = 2 To o_lastcolumn 
      frm = Replace(f1, "<r2>", Cells(1, j).Address(False, False)) 
      frm = Replace(frm, "<r3>", Cells(j, R_lastrow).Address(False, False)) 
      Debug.Print frm 
      Sheets("Sheet2").Cells(k, j).Value = Sheets("Sheet2").Evaluate(frm) 
     Next j 
    Next k 
End Sub 
+0

它工作,但它給'0'值,sheet1值的總和 –

+0

您需要調試您的計數,如果公式:讓它在第一個單元格中工作。 –

+0

Wiliams - 我運行代碼並將「frm」的值顯示爲「Sumif(sheet1!D2:H2,B1,sheet1!H2)」。但是,我認爲我的數據是從B2開始的。你能否建議下一步 –