我在VBA中有一个用户定义的函数,它需要以数组的形式返回超过65,536个结果。但是,如果尝试返回超过65,536个值,则会导致#VALUE:
Function TestSize()
Dim arr() As String
ReDim Preserve arr(1 To 200,000) ' No problem creating and using array with > 65,536 elements
' Populate array....
TestSize = arr() ' Fails here, produces #VALUE, if array > 65,536
End Function
这是一个长期存在的问题。有人知道附近有工作吗?
还有:如果我用VB写这个函数,我会遇到同样的问题吗?
2条答案
按热度按时间6l7fqoea1#
将结果分解为4个数组并返回一个包含4项的数组。第一段代码是为了说明拆分,第二段代码可能更接近你实际想要的方式(但更复杂):
如果你的arr()可以是任意大小,那么,你可以用一个聪明的方法来做上面的事情,使用一个多维数组。未测试:
2ic8powd2#
如果你的数据足够统一,你可以按字母顺序或其他逻辑方式进行排序,比如说字母表中的每个字母指定要搜索的分组。
Dim A_array(50000)、B_array(50000)、C_array(5000)。..等等
如果Left(SearchString,1)= d则
'搜索D_array
如果结束
如果数组记录是用分隔符(如“//”)来构造的,例如A_array(0)=“data 1//data 2//data 3//data 4”中的分隔符来构造的,则可以只搜索D_array,当找到所需的数据时,在分隔符上分割记录,并提取所需的数据。即使使用较小的数组,这种方法实际上也可以加快搜索速度。你可以将数据存储在尽可能多的类别(数组)中,因为你的狡猾的头脑可以创建。据我所知,VBA中数组的数量没有限制。