首页 > 解决方案 > SumIf 语句 - 复杂的标准

问题描述

这是我的故事。下面的代码将计算从第 84 行开始的所有行,这些行在 R 列中具有“1”,在 K 列中以“B”开头,在 L 列中“98(宏)”或“98”开头。

B_black = Application.Sum(Application.SumIfs(Range("R84:R" & LastRow), Range("R84:R" & LastRow), "1", Range("K84:K" & LastRow), "B*", Range("L84:L" & LastRow), Array("98 (macro)", "98")))

我不需要使用该标准计算行数,而是需要它实质上对列 R 中的匹配数量求和。之前,列 R 中的值要么是“1”,要么是 null。现在,它可以为 null 或 1-9。我怎样才能做到这一点?

编辑:我将有几十个这样的陈述。我已经把它们都写出来了。我希望我可以在每个语句中做一个小的更改,以计算符合条件的行中 R 列中的数量。

标签: vbaexcel

解决方案


如果您想对R中的值求和,而不仅仅是计算行数,那么:

Sub Robby()
    Dim B_black As Long, n As Long, i As Long
    B_black = 0
    n = Cells(Rows.Count, "R").End(xlUp).Row
    For i = 83 To n
        If Left(Cells(i, "K").Value, 1) = "B" And (Cells(i, "L").Value = 98 Or Cells(i, "L").Value = "98 (macro)") Then
            B_black = B_black + Cells(i, "R").Value
        End If
    Next i
End Sub

不需要使用工作表函数。

编辑#1:

如果您已经在工作表单元格中有方程式,那么您已经完成了 75%。

假设我们正在使用:

=VLOOKUP(B1 & B2,F1:J16,2,FALSE)

在一个单元格中。要在 VBA 中执行此操作,请编写如下代码:

Sub DoItInAMacro()
    Dim s As String
    s = Evaluate("=VLOOKUP(B1 & B2,F1:J16,2,FALSE)")
    MsgBox s
End Sub

在此处输入图像描述


推荐阅读