在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中,我将使用字典,计算频率,按值sorting并最终将其输出到表中。 我知道,Excel VBA有一个字典结构,但它需要“Microsoft脚本运行时”,我似乎没有在我的Excel中。

除非缺less库引用,脚本运行时是正常安装的一部分,它不会自动添加为您的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脚本运行时的引用,这将允许你喜欢下面,也暴露的intellisense:

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

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

芯片皮尔逊已经产生了一些聪明的sorting数组在这里,但为了你的目的,你想要的程序,可以sorting集/字典, 这里

过去我几乎可靠地使用了所有这些。 就代码行而言,与Python相比,“开销”要多得多,只是将这些函数放在自己的模块中,并根据需要调用它们。