Excel (VBA):对一列中的值求和,直到另一列中的值为 reached/matched

Excel (VBA): Sum values in a column until value in other column is reached/matched

我想对 B 列中的值求和,直到与 A 列中的值相匹配。如果是,我想跳到 A 列中的下一个值,offset(0,1) 并再次求和,直到达到该值,依此类推 每当达到 A 列中的值时,我想将所有用于从 A 列获取值的单元格放入 C 列(用一些颜色突出显示内部也可以) 当对值求和时,它将始终与 A 中的值完全匹配,因此 = 而不是 >

我在下面附上了我 table 的一部分的屏幕。

例如:我想取 A 列中的第一个值 443.33,向右偏移一个,然后开始对该列中的值求和,直到我恰好得到 443.33。当我拥有它时,我想获取需要创建所需总和的单元格(在这种情况下只有 B2)并将它们复制到 C 列中的相邻单元格(在这种情况下 => C2)。 然后我想在 A 列 (66,144.90) 中找到下一个值并重复。

我尝试用 Excel-公式和 Excel-VBA 来做到这一点。不幸的是没有成功。

感谢您的帮助。 谢谢

Screen from my table

Desired result

这应该可以满足您的需求。它会尝试匹配这些值,如果不可能,它将继续使用下一个值。所需的单元格用颜色突出显示。

   Sub MatchValues()
Dim IndexA, IndexB, i, j, k As Integer
Dim ValueA, ValueB As Variant
Dim lrA, lrB As Long
Dim sht As Worksheet

Set sht = Worksheets("Tabelle1")
lrA = sht.Cells(Rows.Count, 1).End(xlUp).Row
lrB = sht.Cells(Rows.Count, 2).End(xlUp).Row


For i = 1 To lrA
    If sht.Cells(i, 1).Value <> "" Then
    ValueA = CDec(sht.Cells(i, 1).Value)
    ValueB = 0
        For j = i To lrB
            If IsNumeric(sht.Cells(j, 2).Value) Then
                ValueB = ValueB + CDec(sht.Cells(j, 2).Value)
            End If
            If ValueA = ValueB Then
                sht.Range(Cells(i, 2), Cells(j, 2)).Interior.ColorIndex = 33 + k
                sht.Cells(i, 1).Interior.ColorIndex = 33 + k
                k = k + 1
                Exit For
            ElseIf ValueB > ValueA Then
                    MsgBox ("Error for Value in Row: " & i)
                Exit For
            End If
        Next j
    End If
Next i
End Sub

这是一种使用公式而不是 VBA 的方法。

您将使用另外两个 "working" 列。

第一个工作列 C 是 A 列中最后一个值的跟踪列。C5 的公式为

=IF(A5<>"",A5,C4)

这将检查 A 列中是否有新值,如果有则使用它,否则使用上一行 A 列中的先前值。

第二个工作列 D 保留 B 列的总计 运行,每次 A 列中有值时重新启动

=IF(A5<>"",B5,D4+B5)

然后你要的数字在E栏

=IF(D5<=C5,B5,"")