Vba 循环仅从最后一行传输数据

Vba 循环仅从最后一行传输数据,vba,excel,for-loop,Vba,Excel,For Loop,我正在尝试将数据从一张图纸传输到另一张图纸,格式如图所示。表1中数据的长度未知。我使用的代码将以正确的格式放置数据,但所有数据最终都是最后一行的数据 For b = 1 To l - 1 Step 1 For c = 0 To (l - 2) * 4 Step 4 idvalue = Sheet1.Cells(b + 1, 1).Value Sheet3.Cells(c + 1, 2).Value = idvalue namevalue

我正在尝试将数据从一张图纸传输到另一张图纸,格式如图所示。表1中数据的长度未知。我使用的代码将以正确的格式放置数据,但所有数据最终都是最后一行的数据

For b = 1 To l - 1 Step 1
    For c = 0 To (l - 2) * 4 Step 4

        idvalue = Sheet1.Cells(b + 1, 1).Value
         Sheet3.Cells(c + 1, 2).Value = idvalue
        namevalue = Sheet1.Cells(b + 1, 2).Value
         Sheet3.Cells(c + 2, 2).Value = namevalue
        amountvalue = Sheet1.Cells(b + 1, 3).Value
         Sheet3.Cells(c + 3, 2).Value = amountvalue
        commentsvalue = Sheet1.Cells(b + 1, 4).Value
         Sheet3.Cells(c + 4, 2).Value = commentsvalue

    Next c
Next b

这里有一个解决方案,可以使代码更易于阅读

显然,您还需要将For循环声明更改为所需的任何起始行/结束行

Sub Example()

Dim lNewRow As Long
Dim lOldRow As Long

lNewRow = 1

For lOldRow = 2 To 7

    With Sheets("Sheet3")

        .Cells(lNewRow, 1) = "ID"
        .Cells(lNewRow, 2) = Sheets("Sheet1").Cells(lOldRow, 1)

        .Cells(lNewRow + 1, 1) = "NAME"
        .Cells(lNewRow + 1, 2) = Sheets("Sheet1").Cells(lOldRow, 2)

        .Cells(lNewRow + 2, 1) = "AMT"
        .Cells(lNewRow + 2, 2) = Sheets("Sheet1").Cells(lOldRow, 3)

        .Cells(lNewRow + 3, 1) = "COMMENTS"
        .Cells(lNewRow + 3, 2) = Sheets("Sheet1").Cells(lOldRow, 4)

    End With

    lNewRow = lNewRow + 4

Next

End Sub

试试这个代码。这是一个通用的解决方案,它不关心表的大小,而且您可以始终对任何表使用它将其转换为长格式。很高兴这有帮助。请用勾号将问题标记为已回答。