卷起总额,如果陈述vba

我有一个产品清单和他们的细节。 第2行是标题,第3行是细节。 在E栏,我有每个产品的数量,我有一个在底部总排。 每个星期我都会得到新的数据,所以数据范围有所不同 数据已按数量从大到小sorting。

现在我的任务是find总数量超过我们销售总量的65%的行。 这意味着我需要总结E列中的每一行,以确定哪一行将使我超过总销售额的65%。

所以我写了一些VBA代码,但我的代码的结果只是row3,其余的都被删除,没有错误。 我正在写vba代码,因为这是我已经写了更大的代码的一部分,所以我只发布这部分的代码。

我已经张贴了我的数据在图片,但不是整个列表,因为它太长(隐藏行),但你会得到我想要实现的想法。 从本周的数据来看,这意味着我将需要删除第18行及以下行,因为第17行是超过65%的第一行。 我不需要显示J和K列,我只是通过总结列百分比的数量和计算来展示我的意思。

Sub test() Dim i, j, k As Integer Dim ValueA, ValueB As Variant Dim lrE, c, d As Long Dim sht As Worksheet Set sht = Worksheets("Zip") lrE = sht.Cells(Rows.Count, 5).End(xlUp).Row d = sht.Range("E" & lrE) For i = 3 To lrE - 1 ValueA = 0.65 ValueB = sht.Cells(i, 5).Value / d If ValueB <= ValueA Then ValueB = ValueB + sht.Cells(i, 5).Value i = i + 1 End If If ValueB > ValueA Then c = sht.Cells(i, 5).Row sht.Rows(c & ":" & Rows.Count).Delete End If Next i End Sub 

在这里输入图像说明

这将find65%或更大的第一行,并删除其余的。

 Sub test() Set sht = Worksheets("Zip") lrE = sht.Cells(Rows.Count, 5).End(xlUp).Row tsum = WorksheetFunction.SUM(sht.Range(sht.Cells(3, 5), sht.Cells(lrE, 5))) For i = 3 To lrE Sbtotal = Sbtotal + sht.Cells(i, 5).Value If Sbtotal / tsum > 0.65 Then LRow = i i = lrE + 1 End If Next i sht.Rows(LRow + 1 & ":" & lrE).Delete End Sub