简体   繁体   English

VBA中的Sumif函数以及如何在公式中使用动态范围

[英]Sumif Function in vba and how to use dynamic range in formula

I tried sumif function through excel vba but i'm getting '#value" error. 我通过excel vba尝试了sumif函数,但出现了“ #value”错误。

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

Could you please suggest me where i'm wrong 你能建议我哪里错了吗

You need to substitute the range addresses into the formula. 您需要将范围地址替换为公式。

Untested: 未经测试:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM