汇总总和和if语句vba

时间:2017-10-31 19:43:52

标签: excel vba excel-vba

我有一份产品清单及其详细信息。第2行是标题,第3行是详细信息。在E栏中,我有每个产品的数量,我在底部有一个总行。每周我都会获得新数据,因此数据范围会有所不同。数据按数量从最大到最小排序。

现在我的任务是找到总数超过我们销售总量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

enter image description here

1 个答案:

答案 0 :(得分:2)

这将找到65%或更高的第一行并删除其余部分。

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