IF 语句的总和和条件范围的变化范围

Varying ranges in sum and criteria range for IF statments

大家好,我在 VBA 代码编写方面需要帮助来提高我的新手技能。我想修改下面的代码以适应 SUMIF 语句中我的求和范围和条件范围的不同数据行范围。

Sub sumifstate ()

Set critRange = Range("K2", Selection.End(xlUp).Offset(-1, 0)).Select
Set sumRange = Range("L2", Selection.End(xlUp).Offset(-1, 0)).Select
Set critRange2 = Range("M2", Selection.End(xlUp).Offset(-1, 0)).Select
Set sumRange2 = Range("N2", Selection.End(xlUp).Offset(-1, 0)).Select

Range("K41").Select

ActiveCell.FormulaR1C1 = _
    "=     (SUMIF("critRange",""*DF*"","sumRange")+SUMIF("critRange2,""*DF*"","sumRange2")"

End Sub ()

如果没有让我知道您可能需要的其他信息,我希望我足够具体。谢谢!

嗨,

那么在您有 R[-39] 或 R[-3] 的地方,您想为实际计算的行插入一个变量吗?

intStartRow = GetStartRow() ' i.e. however you define it, set a variable
intEndRow = GetEndRow()

然后在需要的地方替换:

ActiveCell.FormulaR1C1 = _
    "=(SUMIF(R[" & intStartRow & "]C:R[" & intEndRow & "]C, ...

即使用连接符号“&”,

或者使用“=Offset”公式结合 Counta:这样您就可以拥有 "growing/shrinking" 个范围而无需重新运行您的代码

不能保证所有这四列的数据都在最后一行。但是,每个 SUMIF 要求 所有范围具有相同的大小。对每一对使用相同的公式。您也没有评估 VBA 中的 hte 公式,只是一起构造一个字符串。为此,您可以将范围的地址用作字符串。

Sub sumifstate()
    Dim lr As Long, critRange As String, sumRange As String, critRange2 As String, sumRange2 As String

    lr = Cells(Rows.Count, "L").End(xlUp).Row
    critRange = Range("K2:K" & lr).Address
    sumRange = Range("L2:L" & lr).Address
    lr = Cells(Rows.Count, "N").End(xlUp).Row
    critRange2 = Range("M2:M" & lr).Address
    sumRange2 = Range("N2:N" & lr).Address

    Range("K41").Formula = _
        "=SUMIF(" & critRange & ", ""*DF*"", " & sumRange & ")+SUMIF(" & critRange2 & ", ""*DF*"", " & sumRange2 & ")"

End Sub

生成的公式将是动态的,但采用这种格式。

=SUMIF($K:$K, "*DF*", $L:$L)+SUMIF($M:$M, "*DF*", $N:$N)