在循环内的循环内循环

时间:2016-06-16 18:08:39

标签: excel vba loops nested

我正在尝试运行批处理。我需要将一张纸上的某些列复制并粘贴到新创建的纸张中。这应该包括名称,电子邮件等。我已经做了一个嵌套循环,但是在数据开始重复之后我无法阻止输出行递增。它一直沿着页面继续。我的代码如下:

'收集数据

For r = 1 To ActiveCell.End(xlDown).Row
    Cells(1, c).Select
        Do Until IsEmpty(Selection)
        name = ActiveCell.End(xlToLeft).Value
        email = ActiveCell.End(xlToLeft).Offset(0, 1).Value
        phoneNumber = ActiveCell.End(xlToLeft).Offset(0, 2).Value
        generation = ActiveCell.End(xlToLeft).Offset(0, 3).Value
        status = ActiveCell.End(xlToLeft).Offset(0, 13).Value

'paste data

        Sheets("Compiled Data").Select
        Cells(oRow, c) = name
        Cells(oRow, c + 1) = email
        Cells(oRow, c + 2) = phoneNumber
        Cells(oRow, c + 3) = generation
        Cells(oRow, c + 4) = status

        oRow = oRow + 1

        Loop

如您所见,我已经有两个循环在运行。我想知道我是否需要第三个来停止输出(oRow),如果它甚至可能在循环内的循环内有一个循环。

感谢。

1 个答案:

答案 0 :(得分:0)

Cells(1, c).Select

这总是选择第1行。我不认为这就是你想要的。 在纸张之间切换也是非常低效的。

Sheets("Compiled Data").Select

但你永远不会切换回第一张。

这应该更顺畅

c_old = 1 'Your "Name" column in original
c_new = 1 'Your "Name" column in Compiled Data

For r = 1 To ActiveSheet.Cells(Rows.Count, c_old).End(xlUp).Row
    For j = 0 To 3
        Sheets("Compiled Data").Cells(r, c_new + j) = Cells(r, c_old + j)
    Next j
    Sheets("Compiled Data").Cells(r, c_new + 4) = Cells(r, c_old + 13)
Next r