将数组移动到范围VARIABLE

时间:2013-08-28 17:37:42

标签: arrays excel vba excel-vba range

我试图找到这个,但我不能!是否可以将/复制和VBA阵列移动到范围变量 ,我不是说Range单元格,它是您声明的范围(例如: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

谢谢!

2 个答案:

答案 0 :(得分:2)

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

但是如果你的变量myArray是某种其他类型的对象(比如和数组),你就不能像这样设置它,你必须编写一个将myArray转换为范围的方法。

修改

我猜测Range("A1:A4") = 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

答案 1 :(得分:0)

如果将变体设置为工作表范围,则会得到一个二维数组。试试这个

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

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

修改

正如您可以从此线程中的问题/答案中的注释中看到,范围不是数组,它是一个具有许多属性和方法的复杂对象。其中一个属性(我认为默认属性)是值。该属性实际上是该范围中的单元的值的二维阵列(或至少表现为一个)。因此,如果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