我有一张看起来像这样的表
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中似乎没有。
答案 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,只需将这些函数放在自己的模块中并根据需要调用它们。