excelvba中数字的计数频率
我有一张像这样的桌子excelvba中数字的计数频率,excel,vba,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脚本运行时”,而我的Excel中似
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脚本运行时”,而我的Excel中似乎没有该结构。除非您缺少库引用,否则脚本运行时是正常安装的一部分,只是不会自动添加为对VBA项目的引用 您可以通过后期绑定执行此操作:
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
字典没有内置的排序方法。您可以在工作表上执行排序(使用宏记录器获取正确的语法),然后迭代将值添加到字典中,等等
Chip Pearson已经开发了一些函数,可以对数组进行巧妙排序,但出于您的目的,您需要能够对集合/字典进行排序的过程
在过去,我已经可靠地使用了几乎所有这些。就代码行而言,与Python相比,有更多的“开销”,但只需将这些函数塞进它们自己的模块中,并根据需要调用它们即可