Excel(VBA):列中的总和值,直到达到/匹配其他列中的值

时间:2017-05-20 19:13:21

标签: excel vba excel-vba sum multiple-columns

我想总结B列中的值,直到列A中的值匹配为止。如果是,我想跳到列A中的下一个值,偏移量(0,1)并再次求和,直到达到该值,依此类推 每当达到A列中的值时,我想将所有单元格用于从A列中获取值并将它们放在C列中(突出显示具有某种颜色的内部也会起作用) 在对值进行求和时,它将始终与A中的值完全匹配,因此=而不是>

我从下表的一部分附上了一个屏幕。

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

我尝试使用Excel-Formulas和Excel-VBA执行此操作。遗憾的是没有成功。

感谢一些帮助。 谢谢

Screen from my table

Desired result

2 个答案:

答案 0 :(得分:0)

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

   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

答案 1 :(得分:0)

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

您将使用另外两个“工作”列。

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

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

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

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

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

然后你想要的数字在E栏中

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

Example