2016-06-09 88 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开始的。你能否建议下一步 –