首页 > 解决方案 > 使用基于其他列中的值的循环添加/计算多个条件的行

问题描述

我有一个 excel 表,如下图所示:

在此处输入图像描述

我需要:

  1. 将每个职位的金额和成本相加(全部为 1,全部为 2,全部为 3,......)。

  2. 然后在 Actual 中查找“X”,然后合并该行上 Position 值相等的所有行,因此这应该是最后该位置的前导行和唯一剩余行。但它不应该在同一张纸上,而应该在一张新的纸上。基本上,在这个例子中,会有第二张三行的工作表(因为这个例子中有 3 个位置)

  3. 它需要是动态的。这里可以有任意数量的职位

  4. 每个职位都应采用实际中 X 的职位的描述、日期等。

  5. 还有更多的列和更多的计算需要完成,所以添加计算条件应该很容易。

我不是 Excel Pro,我认为不编写 Makro 是不可能解决这个问题的,所以请随时证明我错了……

到目前为止,我根据我在网上找到的一些片段编写了以下 VBA 代码,但不幸的是,我只添加了特定的行(具有相同的位置编号)并在实际中用“x”输出位置的总和:

Sub MergeRows()
    Dim r_src As Range, r_dst As Range

    ' Pick 1st row and column of table
    Set r_src = Sheets("Sheet1").Range("A2")
    Set r_dst = Sheets("Sheet2").Range("A2")

    Dim i As Integer, j As Integer
    Dim N_rows As Integer, N_cols As Integer

    'Find the size of the data
    N_rows = CountRows(r_src)
    N_cols = CountColumns(r_src)

    'Resize source range to entire table
    Set r_src = r_src.Resize(N_rows, N_cols)

    Dim src_vals() As Variant, dst_vals() As Variant
    'Get all the values from source
    src_vals = r_src.Value2

    ReDim dst_vals(1 To N_rows, 1 To N_cols)
    Dim k As Integer
    Dim x As Integer
    k = 0
    For i = 1 To N_rows
        For x = 1 To 10
            ' Check first column
            If Val(src_vals(i, 1)) = x Then
                ' Increment count
                k = k + 1
                ' Copy row values

                Dim qty As Integer
                qty = qty + src_vals(i, 27)
                src_vals(i, 27) = qty

                For j = 1 To N_cols
                    If src_vals(i, 2) = "X" Then
                    dst_vals(k, j) = src_vals(i, j)
                    End If
                Next j

            End If
        Next x
        qty = 0
    Next i
    ' Bring rows back into destination range
    If k > 0 Then
        r_dst.Resize(k, N_cols).Value2 = dst_vals
    End If
End Sub
Public Function CountRows(ByRef r As Range) As Integer
    CountRows = r.Worksheet.Range(r, r.End(xlDown)).Rows.Count
End Function
Public Function CountColumns(ByRef r As Range) As Integer
    CountColumns = r.Worksheet.Range("A:DS").Columns.Count
End Function

标签: excelvbaloopsfor-loopdatatables

解决方案


请检查这个

在此处输入图像描述 图 1:对不起德国的截图。
“Summe von Amount/Costs”是指“金额/成本的总和”,“Gesamtergebnis”是指“总结果”。

这可以通过数据透视表(不使用 VBA)来完成,它会动态更新。
请参阅创建数据透视表以分析工作表数据

只需将数据透视表添加Position到行AmountCosts值。


推荐阅读