4

在我的 VBA 程序中,我有一个大数据数组,我需要不断地使用它的子数组。

我的方法是:

Redim subArr(rowBegin to rowEnd)
For r = rowBegin to rowEnd
    subArr(r) = bigArr(r)
Next r

请问有没有更有效的方法来引用这种子数组?谢谢...

4

2 回答 2

3

使用数组非常快,所以这可能不会带来明显的好处——尽管我可以理解它如何从编码意义上吸引人,而不是循环填充一个较小的数组

鉴于您正在使用单个元素数组,您可以:

  1. 在大数组中引入一个“标记”字符串
  2. Join将带有分隔符的大数组转换为单个字符串
  3. Split由“标记”字符串组成的大数组,然后用分隔符将缩小的字符串分成一个较小的数组

下面的代码将数字 1 到 100 转储到一个数组中,然后像上面一样拆分它以提取前 10 条记录

Sub test()
Dim bigArr
Dim subArr
Dim strSep As String
Dim strDelim As String
Dim strNew As String
Dim rowBegin As Long
Dim rowEnd As Long

strDelim = ","
strSep = "||"
'fill array with 1 to 100
bigArr = Application.Transpose(Application.Evaluate("row(1:100)"))

rowBegin = 1
rowEnd = 10

bigArr(rowEnd + 1) = strSep
'make a single string
strNew = Join(bigArr, strDelim)
'split the string at the marker 
vArr = Split(strNew, strSep)
ReDim subArr(rowBegin To rowEnd)
'split the smaller string with the desired records
subArr = Split(Left$(vArr(0), Len(vArr(0)) - 1), strDelim)

End Sub
于 2012-04-16T02:20:48.670 回答
2

简短的回答:可能不是

不太简短的答案:既然您正在创建一个非 0/1 边界的子数组,为什么不直接传递对原始数组和边界的引用?

顺便说一句:VBA 阵列的一个很好的资源是 CPearson 的网站http://www.cpearson.com/excel/vbaarrays.htm

于 2012-04-16T01:54:54.457 回答