在VBA中使用范围数组 - Excel

Gen*_*Jam 7 arrays excel vba range

VBA是否支持使用范围变量数组?

dim rangeArray() as range
dim count as integer
dim i as integer

count = 3

redim rangeArray(1 to count)

for i = 1 to count
  msgbox rangeArray(i).cells(1,1).value
next
Run Code Online (Sandbox Code Playgroud)

我不能让它在这种类型的应用程序中工作.我想以一定的顺序存储一系列范围作为"主副本".然后我可以添加,删除,排序或对此数组执行任何操作,然后将其打印到excel中的一系列范围.看起来excel似乎并不支持这一点 - 它只是强迫您将数据存储在电子表格中,您必须重新读取它才能使用它.

Dic*_*ika 11

不,数组不能保存对象.但o对象可以容纳对象.我认为你可能想要的是一个Range对象,它由各种特定的其他Range对象组成.在这个例子中,rMaster是我的"数组",它包含三个单元格.

Sub StoreRanges()

    Dim rMaster As Range
    Dim rCell As Range

    Set rMaster = Sheet1.Range("A1")
    Set rMaster = Union(rMaster, Sheet1.Range("A10"))
    Set rMaster = Union(rMaster, Sheet1.Range("A20"))

    For Each rCell In rMaster
        MsgBox rCell.Address
    Next rCell

End Sub
Run Code Online (Sandbox Code Playgroud)

通过我新发现的知识,数组可以容纳范围(thnx jtolle),这是一个如何在数组中存储范围并对它们进行排序的示例

Sub UseArray()

    Dim aRng(1 To 3) As Range
    Dim i As Long

    Set aRng(1) = Range("a1")
    Set aRng(2) = Range("a10")
    Set aRng(3) = Range("a20")

    BubbleSortRangeArray aRng

    For i = LBound(aRng) To UBound(aRng)
        Debug.Print aRng(i).Address, aRng(i).Value
    Next i

End Sub

Sub BubbleSortRangeArray(ByRef vArr As Variant)

    Dim i As Long, j As Long
    Dim vTemp As Variant

    For i = LBound(vArr) To UBound(vArr) - 1
        For j = i To UBound(vArr)
            If vArr(i).Value > vArr(j).Value Then
                Set vTemp = vArr(i)
                Set vArr(i) = vArr(j)
                Set vArr(j) = vTemp
            End If
        Next j
    Next i

End Sub
Run Code Online (Sandbox Code Playgroud)

  • 如果你编辑这篇文章,我会高兴地删除-1,但是数组*可以*保存对象,包括Range对象. (3认同)

Mar*_*ult 5

目前还不完全清楚你想做什么,但是......

如果您想要一个集合,为什么不使用 VBA 集合对象呢?

Dim myRanges as New Collection
Run Code Online (Sandbox Code Playgroud)

Collection.Item 可以是任何对象,包括 Range。

Range 对象不保存数据;它保存对工作表单元格的引用。如果您想要集合中的范围内容,则必须将它们复制到工作表中或从工作表中复制它们。

与 Java 一样,VBA 变量是短暂的,无论是在数组还是集合中。如果您想关闭文件并在再次打开文件时保留数据,则必须将其放在工作表单元格中。工作表是您的持久机制。

我要在这里迈出一大步,所以如果我离得很远,请忽略我。我认为您正在寻找的建议设置一个单独的工作表作为您的“数据库”,其中填充了保存原始数据的列表/表对象。在它的前面,是您的“用户表”,您可以在其中参考数据库表中的数据来执行有趣的操作。说出一切。