📜  excel vba数组先删除 - VBA(1)

📅  最后修改于: 2023-12-03 14:41:03.105000             🧑  作者: Mango

Excel VBA数组先删除 - VBA

在 Excel VBA 编程中,数组是一种重要的数据结构,它可以在内存中保存一系列值,并且可以随时添加或删除其中的元素。在实际的项目开发中,我们有时需要在数组中删除特定元素。本文将介绍如何使用 VBA 删除 Excel 中的数组元素。

删除单个元素

在 VB 中,可以使用 ReDim 语句来重新定义数组的大小。通过将数组的大小减小一个单位,就可以删除最后一个元素。以下代码演示了如何删除数组 myArray 中的最后一个元素:

ReDim Preserve myArray(UBound(myArray) - 1)

这里使用 Preserve 保留数组中已有的元素,只修改数组的大小。需要注意的是,如果数组中只有一个元素,则不能再次删除元素,否则会引发“下标越界”错误。

如果要删除数组中的第一个元素,可以使用 For...Next 循环,将数组中的每个元素复制到一个新数组中,但跳过第一个元素。以下代码演示了如何删除数组 myArray 中的第一个元素:

Dim newArray() As Variant
ReDim newArray(LBound(myArray) To UBound(myArray) - 1)
For i = 1 To UBound(myArray)
    newArray(i - 1) = myArray(i)
Next i
myArray = newArray

这里要注意的是,新数组的下标比 myArray 的下标小一,需要在复制元素时减一。同时,也可以使用 Array 函数创建新数组,如下所示:

myArray = Array(myArray(LBound(myArray) + 1) To myArray(UBound(myArray)))

这里用 Array 函数将数组中除第一个元素外的所有元素重新放置到一个新数组中。

删除多个元素

如果要删除数组中的多个连续元素,可以使用 For...Next 循环,将这些元素的后面的元素向前移动。以下代码演示了如何删除数组 myArray 中的一段连续的元素:

' 删除从第2个到第4个元素
For i = 2 To UBound(myArray) - 2
    myArray(i) = myArray(i + 3)
Next i
ReDim Preserve myArray(UBound(myArray) - 3)

这里用循环将第 5 个到最后一个元素向前移动 3 个位置,然后重新定义数组的大小,以删除最后三个元素。需要注意的是,如果要删除的元素数量超过数组的大小,就会引发“下标越界”错误。

如果要删除的元素不连续,则需要将它们从头到尾依次删除。以下代码演示了如何删除数组 myArray 中的若干个不连续的元素:

Dim newArray() As Variant
ReDim newArray(LBound(myArray) To UBound(myArray))
For i = LBound(myArray) To UBound(myArray)
    If i <> 2 And i <> 4 And i <> 5 Then
        newArray(j) = myArray(i)
        j = j + 1
    End If
Next i
ReDim Preserve newArray(j - 1)
myArray = newArray

这里使用一个新数组 newArray 来保存要保留的元素。循环遍历原数组 myArray 的所有元素,只将不需要删除的元素复制到新数组中。需要注意的是,新数组的下标要从 0 开始,需要在复制元素时自增。最后重新定义数组的大小,以删除多余的元素。