将一列中的值的数量相加,具体取决于另外两列中的因子

时间:2015-05-19 05:15:38

标签: vba excel-vba excel

我有一个项目,我需要根据两个因素计算值的数量。对于N中的每个单元,其中= EE Only,O = 1列中的相应单元。问题是,对于值为EE + FAM或EE + SP的单元,它们需要计算出现这些值的实例数在" M"的相应值之间在L列中,如图所示。图片显示了输出应该是什么。

enter image description here

如果N列中的值是" EE Only",那么我到目前为止的代码可以放1,如果值是其他值则为2。我不确定如何构建第二组条件来检查L列中的值。我对VBA很新,所以任何帮助都表示赞赏。这是代码。

Sub CountDependents()
    Dim DepCount As Long
    Dim LastRowConsole As Long
    Dim m As Integer
    Dim l As Integer
    Dim j As Integer
    Dim k As Integer
    Dim ws As Worksheet

    Set ws = Sheets("Audit page")

    m = 1
    For l = 4 To 15
        If Cells(l, "N") <> "EE Only" Then
            m = m + 1
        End If

        Cells(l, "O").Value = m
        m = 1
    Next l

    k = 1
    For j = 4 To 15
        If Cells(j, "L") = "M" Then
            k = k + 1
        End If

        Cells(j, "O").Value = Cells(j + Cells(j, "O") / 2, "O").Value
        j = 1
    Next j               
End Sub

1 个答案:

答案 0 :(得分:1)

如果你想处理名称列,这里有一些简单的代码来处理它。我们的想法是,您使用Range“构建”Union,然后在点击“切换”时计算这些单元格。然后,您可以随时随地输出该计数。

在下面的虚拟示例中,我使用的是d而不是dependent。我也在名称列旁边输出。您可以修改这些以适合您的应用程序。

Sub CountPeople()

    Dim rng_cell As Range
    Dim rng_top As Range

    Set rng_top = Range("K3")

    Dim bool_first As Boolean
    bool_first = True

    For Each rng_cell In Range(rng_top, rng_top.End(xlDown))

        If rng_cell <> "d" And Not bool_first Then
            'starting new person, output result from last to top of last person
            rng_top.Offset(, 1) = rng_top.Cells.Count

            'new top cell is current cell
            Set rng_top = rng_cell

        Else
            'keep growing range if we see a dependent
            Set rng_top = Union(rng_top, rng_cell)
        End If

        bool_first = False
    Next

    'handle the last person
    rng_top.Offset(, 1) = rng_top.Cells.Count

End Sub

结果,请注意输出进入黄色单元格。

results of VBA

代码粗略描述

  • 选择一个起点。
  • 遍历所有名称,包括该单元格及其下方。
  • 如果当前单元格等于d,则继续构建范围
  • 一旦我们看到d以外的其他内容,我们需要计算之前的单元格并在隔壁的列中输出计数。
  • 有一条线来处理第一种情况(它不应该等于d,但我们要计算它并继续前进)以及将在循环外完成的姓氏。