for循环返回错误的元素数组

时间:2013-12-27 12:40:42

标签: arrays excel vba excel-vba for-loop

我有一个命令按钮,代码如下:

Dim array1()
Dim nrow As Integer

nrow = Range("C4:C241").Count

ReDim array1(nrow)

For i = 0 To nrow
    'array1(i) = Range("C" & i + 3)
    array1(i) = i
Next

Range("AY4:AY" & nrow + 3) = array1

如果您想切换以进行一些实验,则会出现评论符号'

我在Excel中运行此宏的是一列等于0的值,这不是我期望得到的:我想在array1中打印Range("AY4:AY241") }。

我哪里错了?

3 个答案:

答案 0 :(得分:5)

考虑将Tranpose用于预期的输出。

Sub dural()
    Dim array1()
    Dim nrow As Integer
    nrow = Range("C4:C241").Count
    ReDim array1(nrow)
    For i = 0 To nrow
        array1(i) = i
    Next
    Range("AY4:AY" & nrow + 3) = Application.WorksheetFunction.Transpose(array1)
End Sub

答案 1 :(得分:1)

我建议使用

ReDim array1(1 to nrow, 1 to ncol)

然后

Range("C4").Resize(nrow,ncol).Value = array1

这样你可以确保数组是1-base,这是Excel喜欢的,输出范围正是你想要的大小。

答案 2 :(得分:0)

我认为这里的问题是你正在做for i = 0 而不是for i = 1

当i = 0时,你指的是第3行;如果你确实喜欢array1(i) = Range("C" & i),而不是添加3,那么你可能会收到错误

修改

根据brettdj的评论,这不是一个未经测试的答案。这是代码中的错误。要做一个完整的答案,就像我说的那样,从1开始循环,然后添加,如在接受的答案中那样

Range("AY4:AY" & nrow + 3) = Application.WorksheetFunction.Transpose(array1)