将数组移动到范围VARIABLE

我想find这个,但我不能! 是否有可能移动/复制和VBAarrays到一个范围variables ,我不是说一个范围单元格,它是一个范围,你声明(例如:DIM运行范围)

我想要这样的东西:

Public Function test() Dim ran As Range Dim myArray(4) As Integer myArray(1) = 1 myArray(2) = 2 myArray(3) = 3 myArray(4) = 4 'If I do this, it works! Range("A1:A4") = myArray 'But I want this and it does not work! ran = myArray End Function 

谢谢!

即使范围是在代码中声明,它仍然是一个范围 ,而不是一个数组。 如果myArray实际上是一个Range对象(在这种情况下,你应该重新考虑你的命名约定),你应该能够做你的例子显示。

但是,如果你的variablesmyArray是一些其他types的对象(像和数组),你不能像这样设置,你将不得不写一个方法将myArray转换为一个范围。

编辑:

我猜测Range("A1:A4") = myArray工作的原因是赋值运算符已被重载以支持它作为Range("A1:A4").Value = myArray缩写, Range("A1:A4").Value = myArray

然而,Range不仅仅是一个数组,它是一个特定于工作簿范围的数据结构

当你声明Dim ran As Range你还没有实际初始化你的Range对象。 我猜如果你做了以下工作:

 Dim ran As Range("A1:A4") Dim myArray(4) As Integer myArray(1) = 1 myArray(2) = 2 myArray(3) = 3 myArray(4) = 4 ran = myArray 

如果您将变体设置为工作表范围,则您将获得一个2维数组。 尝试这个

 Sub MoveArray() Dim myArray myArray = Range("A1:B3").Value Range("A6:B8").Value = myArray End Sub 

或这个

 Sub MoveArray2() Dim myArray Dim myArray2 Dim myRange Dim i As Integer Dim j As Integer myArray = Range("A1:B3").Value Set myRange = Range("A6:B8") For i = 1 To myRange.Rows.Count For j = 1 To myRange.Columns.Count myRange.Cells(i, j) = myArray(i, j) Next j Next i myArray2 = myRange End Sub 

在任何一种情况下,variables都变成一个数组而不是一个范围对象,循环设置数组范围的值。

编辑

正如你可以从这个线程中的问题/答案的注释中看到的,一个范围不是一个数组,它是一个复杂的对象,有很多属性和方法。 其中一个属性(我认为是默认属性)是价值。 这个属性实际上是一个二维数组(至lessperformance为一个)的范围内的单元格的值。 因此,如果myArray也是一个2 dimsensional aray代码myRange = myArray将执行。 将会发生的是,范围指向的单元格的值将被设置为数组中的值。 范围是指这些单元格,但它是单元格中值的变化而不是范围对象。

因此,如果您将范围转移到不同的单元格集合,新的单元格集合将保留其值。

在实际的一面,如果你想改变一个范围所反映的单元格的值,可以这样做,如下所示:

 Sub Test1() Dim myArray(1 To 4, 1 To 1) Dim myRange As Range myArray(1, 1) = 1 myArray(2, 1) = 2 myArray(3, 1) = 3 myArray(4, 1) = 4 Set myRange = Range("A1:A4") myRange = myArray End Sub