-1

我的 NUMERIC 数组是 A(0 到 99)。

我想删除第十个元素A(9),把A(0到8)和A(10到99)两部分一起放到A(0到98)中。

这是对真实情况的简化,在循环中多次删除不同的元素,并且数组包含超过 300 000 个元素,因此执行时间很重要。如何以有效的方式解决这个问题。

谢谢你的帮助。

4

3 回答 3

1

您可以尝试使用集合:

Sub test()
    Dim c As New Collection

    c.Add "a"
    c.Add "b"
    c.Add "c"
    c.Add "d"

    c.Remove 2

    For Each ch In c
        Debug.Print ch
    Next

End Sub
于 2013-09-01T11:21:17.513 回答
0

子测试()

Dim A(6) As New Collection ' 7 arrays
Dim i As Long

For i = 0 To 367907
    A(0).Add Worksheets("Sheet1").Cells(i + 1, 1)
    A(1).Add Worksheets("Sheet1").Cells(i + 1, 2)
    A(2).Add Worksheets("Sheet1").Cells(i + 1, 3)
    A(3).Add Worksheets("Sheet1").Cells(i + 1, 4)
    A(4).Add Worksheets("Sheet1").Cells(i + 1, 5)
    A(5).Add Worksheets("Sheet1").Cells(i + 1, 6)
    A(6).Add Worksheets("Sheet1").Cells(i + 1, 7)
xt i

结束子

于 2013-09-02T18:05:59.113 回答
0

此代码适用于为 collA 分配值,但 Remove 语句有什么问题?
我想删除 collA(1)(9, 0), collA(1)(9, 1), collA(1)(9, 2), collA(1)(9, 3), collA(1)(9 , 4), collA(1)(9, 5) 和 collA(1)(9, 6)。

Sub Test()

    Dim A() As Integer
    Redim A(0 To 367907, 0 To  6) As Integer

    Dim i As Long
    Dim j As Integer

    For i = 0 To 367907
    For j = 0 To 6    
        A(i, j) = Worksheets("Sheet1").Cells(i + 1, j + 1)
    Next j
    Next i

    Dim collA As VBA.Collection

    Set collA = New Collection
    collA.Add A

    Erase A

    collA(1).Remove 10

End Sub
于 2013-09-03T09:10:48.353 回答