Excel VBA:Scripting.Dictionary计算

我在电子表格中具有以下值:

Printer Name | Pages | Copies HP2300 | 2 | 1 HP2300 | 5 | 1 Laser1 | 2 | 2 Laser1 | 3 | 4 HP2300 | 1 | 1 

我怎样才能在每台打印机上打印总页数(页数*副本):

 Printer Name | TotalPages | HP2300 | 8 | Laser1 | 16 | 

我设法创build一个列表来计算打印机被用来打印的次数:

 Sub UniquePrints() Application.ScreenUpdating = False Dim Dict As Object Set Dict = CreateObject("scripting.dictionary") Dim varray As Variant, element As Variant varray = Sheets("Prints").Range("E:E").Value For Each element In varray If Dict.exists(element) Then Dict.Item(element) = Dict.Item(element) + 1 Else Dict.Add element, 1 End If Next Sheets("Stats").Range("D6").Resize(Dict.Count, 1).Value = _ WorksheetFunction.Transpose(Dict.keys) Sheets("Stats").Range("E6").Resize(Dict.Count, 1).Value = _ WorksheetFunction.Transpose(Dict.items) Application.ScreenUpdating = True End Sub 

如何计算每个打印(行)(页面*副本)的总页数并将其保存在字典中,而不是仅添加1?

感谢您的帮助

请阅读E:G列而不是E列,并使用该数组的第二个维来添加页面*副本,而不是添加1。

 Sub UniquePrints() Dim Dict As Object Dim vaPrinters As Variant Dim i As Long Set Dict = CreateObject("scripting.dictionary") vaPrinters = Sheets("Prints").Range("E2:G6").Value For i = LBound(vaPrinters, 1) To UBound(vaPrinters, 1) If Dict.exists(vaPrinters(i, 1)) Then Dict.Item(vaPrinters(i, 1)) = Dict.Item(vaPrinters(i, 1)) + (vaPrinters(i, 2) * vaPrinters(i, 3)) Else Dict.Add vaPrinters(i, 1), vaPrinters(i, 2) * vaPrinters(i, 3) End If Next i Sheets("Stats").Range("D6").Resize(Dict.Count, 1).Value = _ WorksheetFunction.Transpose(Dict.keys) Sheets("Stats").Range("E6").Resize(Dict.Count, 1).Value = _ WorksheetFunction.Transpose(Dict.items) End Sub 

可以使用数组公式来填充单元格:

 ={SUMPRODUCT(IF($A$2:$A$6=$F2;1;0);$B$2:$B$6;$C$2:$C$6)} 

使用Ctrl-Shift-Enter从公式窗口插入公式。 曲线括号由excel插入,而不是由用户插入。 该公式可以复制到其他地方。

在这里输入图像说明