IF语句的总和和标准范围的变化范围

时间:2015-02-25 01:22:23

标签: excel vba excel-vba if-statement range

嘿伙计我在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 ()

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

2 个答案:

答案 0 :(得分:0)

嗨,

那么你有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结合使用:允许您拥有“增长/缩小”范围而无需重新运行代码

答案 1 :(得分:0)

无法保证所有这四列中的数据都位于同一最后一行。但是,每个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$2:$K$10, "*DF*", $L$2:$L$10)+SUMIF($M$2:$M$10, "*DF*", $N$2:$N$10)