VBA循环用于将数据从单元格复制到数组

时间:2014-06-04 08:30:38

标签: arrays excel-vba vba excel

我是excel的VBA新手,我编写了将单元格从单元格复制到数组的代码。当我运行时出现运行时错误。我不知道什么是错的。

Sub DistSystem()

Dim count As Integer    
Dim i As Integer    
Dim array_rank() As Variant    
Dim array_city() As Variant    
Dim array_assign() As Variant

    count = Sheets("111").Range("Y2").Value

    For i = 0 To count
        array_city(i) = Range("A" & i).Value    
        array_rank(i) = Range("E" & i).Value
        array_assign(i) = Range("F" & i).Value
    Next

    For i = 1 To 10
        MsgBox array_rank(i, 1) 
    Next

End Sub

1 个答案:

答案 0 :(得分:3)

我怀疑你会在多个地方出现战斗错误。

此部分代码有两个重要问题

array_city(i) = Range("A" & i).Value    
array_rank(i) = Range("E" & i).Value
array_assign(i) = Range("F" & i).Value

首先,您尝试将值分配给没有任何维度的数组。你删除了数组,但你让它们无量纲。在尝试为数组赋值

之前,需要定义尺寸

这样的东西
Redim array_city(1 to count)

接下来,当Range("A" & i)的值为零时,您尝试从i获取值。 Cell "A0"不存在,也会引发错误。

因此,要编写代码,您需要进行一些更改:

Sub DistSystem()

Dim count As Integer    
Dim i As Integer    
Dim array_rank() As Variant    
Dim array_city() As Variant    
Dim array_assign() As Variant

    count = Sheets("111").Range("Y2").Value

    Redim array_rank(1 to count)
    Redim array_city(1 to count)    
    Redim array_assign(1 to count)

    For i = LBound(array_rank) To UBound(array_rank)
        array_city(i) = Range("A" & i).Value    
        array_rank(i) = Range("E" & i).Value
        array_assign(i) = Range("F" & i).Value
    Next

    For i = 1 To 10
        MsgBox array_rank(i) 
    Next

End Sub

但是,您将如何将值读入数组变得更加复杂。您可以直接将整个范围读入数组

Sub DistSystem()

Dim count As Integer    
Dim i As Integer    
Dim array_rank As Variant    'Notice the arrays are not longer declared with () 
Dim array_city As Variant    '  -> this is necessary
Dim array_assign As Variant

    count = Sheets("111").Range("Y2").Value

    array_city = Range("A1:A" & count).Value    
    array_rank = Range("E1:E" & count).Value
    array_assign = Range("F1:F" & count).Value

    For i = 1 To 10
        MsgBox array_rank(i, 1) 
    Next

End Sub

生成的数组为2维,Row值为第一维,列为第2维。由于所有范围都是一列,您可以通过调用array_rank(Row,1)array_city(Row,1)array_assign(Row,1)来访问任何值。