我有一份产品清单及其详细信息。第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
答案 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