使用WorksheetFunction.Frequency后,索引在VBA中始终超出范围

时间:2017-11-02 15:04:21

标签: arrays excel vba excel-vba variant

我正在尝试将大量数据(最多一百万个条目)存入~60个二进制位,以便与最终将被输入直方图的一些数据分析一起使用。问题是当我使用下面的代码时:

{{1}}

'我不得不以这种方式对myBinnedData进行Dim,否则我会收到错误,说它无法分配给数组

我永远无法通过使用索引访问myBinnedData。我能够获取数据的唯一方法是通过For Each循环,但在处理每个点之前,我需要myBinnedData中的第一个和最后一个元素。在For Each循环中一切正常,但是无论何时我尝试索引(即data = myBinnedData(0)),无论索引号如何,我都会得到Index Out of Range错误。我使用TypeName检查了类型,它是Variant()。

所以问题是,索引由WorksheetFunction.Frequency函数创建的数组的正确方法是什么?

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

frequency返回一个二维数组(但据我所知,第二维只是从1到1)。 试试

  Debug.print lbound(myBinnedData, 1),  ubound(myBinnedData, 1)
  Debug.print lbound(myBinnedData, 2),  ubound(myBinnedData, 2)

第一行应该给出1作为下限,myBins + 1的大小作为上限 第二行应该给你1个下限和上限。 要循环数据,请使用

dim i as integer
for i = lbound(myBinnedData, 1) to ubound(myBinnedData, 1)
    Debug.print myBinnedData(i, 1)
next i 

答案 1 :(得分:0)

正如Zerk在评论中提到的那样,FunThomas回答说,Frequency函数返回一个2D数组,所以我能够使用myBinnedData(index,1)对其进行索引。我以为我已经尝试过了,但我猜不是!谢谢你的帮助!

我从未尝试过Nikolaos提供的答案,因为我不会从Excel表格中调用任何数据,我只会打印到它。 myData和myBins数组是在VBA代码中创建的。