line customer product OrderQty TotalQty
1 A 11111 5 10
2 B 11111 5 10
3 c 11111 5 10
4 A 22222 5 20
5 B 22222 5 20
6 C 22222 5 20我有一张上面所示的桌子。
当产品的OrderQty大于TotalQty时,我想突出显示这些线条。
OrderQty表示按该顺序请求的单元数,TotalQty表示可用于执行所有订单的总单元数。
在本例中,我希望突出显示第1,2,3行,因为产品11111 OrderQty 5+5+5=15大于TotalQty 10。
有什么方法可以在VBA中实现自动化吗?我怀疑使用Sumifs,但我不能把头绕着..。
提前感谢!
发布于 2020-04-29 09:15:20
也许是这样的?
Sub test()
Range("A:E").Interior.Pattern = xlNone
Range("C1:C7").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("AA1"), Unique:=True
Set Rng = Range("AA2", Range("AA100000").End(xlUp))
For Each Prod In Rng
Set c = Range("C:C").Find(Prod.Value, lookat:=xlWhole)
Tot = c.Offset(0, 2).Value
Ord = Application.SumIf(Range("C:C"), Prod.Value, Range("D:D"))
If Ord > Tot Then
For Each cell In Range("C2", Range("C2").End(xlDown))
If cell.Value = Prod.Value Then
Range(cell.Offset(0, -2), cell.Offset(0, 2)).Interior.Color = 65535
End If
Next cell
End If
Next Prod
Range("AA:AA").ClearContents
End Sub或者,如果选择不使用VBA,则使用条件格式。
=SUMIF($C:$C,$C2,$D:$D)>VLOOKUP($C2,$C:$E,3,FALSE)

发布于 2020-04-29 08:27:50
你不需要VBA来做这个。假设上表从第1行开始,A列中为Line,E列为TotalQty;将唯一的产品列表放在F列中,在单元格G2中放置公式:
=IF(SUMIF(C:C,F2,D:D)>VLOOKUP(F2,C:E,3,FALSE), "Over", "Equal or under")SUMIF与每个产品的OrderQty之和,VLOOKUP返回表中每个产品的第一个实例的TotalQty。然后,如果需要,可以使用条件格式突出显示行。
如果您确实使用了VBA路由,我可能会将表放入数组中,创建一个带有OrderQty值的产品字典,或者在数组和求和值上循环,或者在字典键上循环并调用sumif工作表函数。
发布于 2020-04-29 08:23:08
[你好凯尔,
这就是你想要做的。这只是简单的解决方案,但可以帮助您。我用了一个帮助栏作为你提到的标准。我用的是苏富比。您可以根据您的风格和需要对其进行修改。我使用条件格式来突出显示单元格。]1
https://stackoverflow.com/questions/61496897
复制相似问题