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)
大家好,我在 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)