计算Excel VBA中的数字频率

时间:2014-08-07 01:17:48

标签: excel vba

我有一张看起来像这样的表

0.01
0.03
-0.08
0.01
0.02
0.05
0.03
...

我想按频率在水平表中按如下方式对它们进行分组:

Number   0.01   0.02   0.03  ...
Freq      2      1      2    ...

在Excel VBA中执行此操作的最佳方法是什么?在Python中,我会使用字典,计算频率,按值对它们进行排序,最后将它们输出到表中。我知道Excel VBA有一个字典结构,但它需要" Microsoft Scripting Runtime"我的Excel中似乎没有。

1 个答案:

答案 0 :(得分:1)

除非您错过了库引用,否则Scripting Runtime是正常安装的一部分,它不会自动添加为VBProject的引用。

您可以使用后期绑定来执行此操作:

Dim dict as Object
Dim cl as Range, rng as Range
Set dict = CreateObject("Scripting.Dictionary")

Set rng = Range("A1:A10000") 'modify as needed
For each cl in rng.Cells
    dict(cl.Value) = dict(cl.Value) + 1
Next

通过早期绑定,您需要启用对Microsoft Scripting Runtime的引用,这样您就可以在下面进行操作,并且还会显示intellisense:

Dim dict as Scripting.Dictionary
Set dict = New Scripting.Dictionary 'Instead of CreateObject

字典没有内置的Sort方法。您可以在工作表上执行排序(使用宏录制器来获取正确的语法),然后迭代以将值添加到字典中等。

Chip Pearson已经制作了一些巧妙地对数组here进行排序的函数,但出于您的目的,您需要可以对集合/词典进行排序的过程,HERE

我过去曾经可靠地使用了所有这些。就代码行而言,还有很多"开销"而不是使用Python,只需将这些函数放在自己的模块中并根据需要调用它们。