Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excelvba中数字的计数频率_Excel_Vba - Fatal编程技术网

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相比,有更多的“开销”,但只需将这些函数塞进它们自己的模块中,并根据需要调用它们即可