是否可以使用VBA组合数组中的值?

时间:2015-02-17 12:44:39

标签: arrays excel vba

我是VBA的新手,我被困了...... 我有一张工人桌和他们工作的时间。我想将所有工作人员插入到一个数组中,并将他们一直工作的总时间打印出来,然后将它们打印到另一张工作表中。

Example of table:

问题在于我不知道是否可以将这些值一起插入到数组中。现在我已将名称硬编码到我的代码中并使用If语句来为正确的名称添加小时但如果我向表中添加更多的工作人员将是一个问题(因为那时我也需要将这些名称添加到代码中)。我不希望代码在运行之前知道名称或工人数量。

我希望打印输出如下:

Steve | 13
Emma  | 2
Andy  | 3
Jeff  | 12

感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

使用这个或类似的东西:

Sub test()
    Dim Dic As Object, oCell As Range, i&, y%, key As Variant
    Set Dic = CreateObject("Scripting.Dictionary")
    y = 1: i = Cells(Rows.Count, "A").End(xlUp).Row
    For Each oCell In Range("A2:A" & i)
        If Not Dic.exists(oCell.Value) Then
            Dic.Add oCell.Value, WorksheetFunction.SumIf(Range("A2:A" & i), oCell.Value, Range("B2:B" & i))
        End If
    Next
    For Each key In Dic
        Debug.Print key, Dic(key)
    Next
End Sub

这里是截图

enter image description here

答案 1 :(得分:1)

非常简单的方法:

Function GetTable(r As Range) As Variant
GetTable = r.Value
End Function

Sub main()
Dim Table As Variant
Table = GetTable(ActiveSheet.Range("A2:B6")) 'Supply the range of your workers.
For i = 1 To UBound(Table, 1)
Sum = Sum + Table(i, 2)
Next
MsgBox (Sum)
End Sub

输出: enter image description here

答案 2 :(得分:0)

只需使用数据透视表,并在必要时单击工作表时自动刷新数据透视表。