首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel VBA: Scripting.Dictionary计算

Excel VBA: Scripting.Dictionary计算
EN

Stack Overflow用户
提问于 2013-06-20 14:08:28
回答 2查看 7.7K关注 0票数 3

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

代码语言:javascript
复制
Printer Name | Pages | Copies
HP2300       | 2     | 1
HP2300       | 5     | 1
Laser1       | 2     | 2
Laser1       | 3     | 4
HP2300       | 1     | 1

如何获得每台打印机上打印的总页数(页数*份数),如下所示:

代码语言:javascript
复制
Printer Name | TotalPages |
HP2300       | 8          |
Laser1       | 16         |

我设法创建了一个列表,统计使用打印机打印的次数:

代码语言:javascript
复制
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?

谢谢你的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-20 21:34:35

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

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2013-06-20 20:49:29

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

代码语言:javascript
复制
={SUMPRODUCT(IF($A$2:$A$6=$F2;1;0);$B$2:$B$6;$C$2:$C$6)}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17206419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档