在循环中创建新数组

安洁莉卡

我想找到一组值的平均值。

我正在这样做:

Dim avg(1 To 14)

For i = 1 To 14
    Dim helparray(1 To 3)
    For j = 1 To 3
         helparray(j) = Sheets("mysheet").Cells(i, j)
    Next j
    Avg(i) = Application.Average(helparray)
    Erase helparray
Next i

的声明会发生什么helparray是否在每次迭代时重新声明?还是只是清洗了?

如何在每次迭代时创建一个新数组(然后删除它)?

VBasic2008

动态与静态数组

  • 当您擦除像 那样的静态数组时avg,正如您所说,它只会被清除。
  • 您必须声明一个动态数组helparray,然后将redim声明为您需要的大小。当您擦除它时,它将被删除(不会占用内存中的“空间”)。
  • 第二个过程显示了如何(应该)避免使用第二个数组。
  • 阅读本文以了解有关静态(固定)和动态数组的更多信息。

代码

Option Explicit

Sub testArrays()
    
    Dim i As Long
    Dim j As Long
    Dim avg(1 To 14)
    Dim helparray() As Variant
   
    For i = 1 To 14
        ReDim helparray(1 To 3)
        For j = 1 To 3
             helparray(j) = Sheets("mysheet").Cells(i, j)
        Next j
        avg(i) = Application.Average(helparray)
        Erase helparray
    Next i

    Debug.Print Join(avg, vbLf)
    
End Sub

Sub testArrays2()
   
    Dim i As Long
    Dim j As Long
    Dim avg(1 To 14)
    
    For i = 1 To 14
        avg(i) = Application.Average(Sheets("mysheet").Cells(i, 1).Resize(, 3))
    Next i

    Debug.Print Join(avg, vbLf)
   
End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章