【发布时间】:2013-01-10 15:40:24
【问题描述】:
因此,我尝试在 Excel 中分析一些数据,但在查找最常见的数字时遇到了一些麻烦。我有一个未知数量的地点,可以有未知数量的捐赠。例如
- 布兰特福德 $50.00
- 布兰特福德 $25.00
- 布兰特福德 $50.00
- 温莎 $200.00
- 魁北克 $25.00
- 魁北克 $100.00
- 魁北克 $50.00
- 魁北克 $50.00
- 魁北克 $25.00
- 魁北克 $50.00
- 魁北克 $50.00
- 魁北克 $25.00
- 魁北克 $100.00
- 魁北克 $40.00
- 温莎 $140.00
- 温莎 $20.00
- 温莎 $20.00
所以我需要使用 VBA 来查找每个位置的计数、总和、平均值和模式(必须通过 VBA 完成,不能只编写有关如何使用高级过滤器/数据透视表执行此操作的说明 :() .
所以现在使用 VBA 我有一个字典对象,它将位置名称存储为键,并将每个捐赠存储在一个集合中。使用我有计数的集合的计数,可以很容易地循环遍历集合以获得总和,使用我的平均值;但是,我不确定获得该模式的最有效方法。
我知道如果我的数据位于使用 Application.mode 的数组中,我可以找到它,但这似乎不适用于集合 :(。将集合转换为数组虽然可以找到模式,但实际上并没有让我觉得是最有效的解决方案。我能找到的唯一其他选择是对集合进行排序,然后遍历它们以找到模式。
所以想知道是否有人知道找到集合统计模式的好方法?
Dim locdata As Object
Set locdata = CreateObject("scripting.dictionary")
For counter = 2 To max
mykey = Cells(counter, loccol).value
If Not (locdata.exists(mykey)) Then
locdata.Add (mykey), New Collection
End If
locdata(mykey).Add (Cells(counter, donamountcol).value)
Next counter
For Each k In locdata.keys
locname = k
Cells(counter, 1) = k
Cells(counter, 2) = locdata(k).Count
donationtotal = 0
For Each donvalue In locdata(k)
donationtotal = donationtotal + donvalue
Next donvalue
Cells(counter, 3) = donationtotal
Cells(counter, 4) = donationtotal / CDbl(locdata(k).Count)
'Cells(counter, 5) = Application.mode(locdata(k)) doesn't work :(
counter = counter + 1
Next k
edit:理想情况下,输出应该是(以魁北克为例) 魁北克:计数:10 总和:515 平均:51.5 众数:50
【问题讨论】:
-
为什么不在字典中使用数组而不是集合?将东西添加到集合中可能更容易,但数组更容易计算...
-
我不知道需要为数组分配多少值
-
您可以使用
ReDim Preserve myArray(newUpperBound)扩展数组,同时保留现有内容。确保在更改之前将数组从字典中取出:stackoverflow.com/questions/2404212/…
标签: vba collections