如何在VBA中有效地创建子阵列?

时间:2012-04-16 00:45:15

标签: excel excel-vba vba

在我的VBA程序中,我有大量数据,我需要不断使用其子数组。

我的方法是:

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

有没有更有效的方法来引用这种子阵列?感谢...

2 个答案:

答案 0 :(得分:3)

使用数组非常快,所以这可能没有任何明显的好处 - 我可以理解它是如何从编码意义上吸引而不是循环来填充更小的数组

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

  1. 在大数组
  2. 中引入“marker”字符串
  3. Join带有分隔符的大数组到单个字符串
  4. Split大号数组由“marker”字符串组成,然后将缩小的字符串分隔成带分隔符的较小数组
  5. 下面的代码将数字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
    

答案 1 :(得分:2)

简短回答:可能不是

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

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