宏在下一个重复

时间:2016-03-23 23:44:53

标签: excel-vba macros vba excel

我有这个宏在第一行正常工作,但一旦完成,我希望它在下一行再次运行,并将结果粘贴到"结果"表格并继续整个文档的过程,直到它到达最后一条记录 - (我的电子表格中有大约5300条记录)

Sub Macro2()
    ' Macro2 Macro

    Range("A2:BW2").Select
    Selection.Copy
    Sheets("Lookup").Select
    Range("F3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("F3:V3").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Result").Select
    Range("A2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

End Sub

所以基本上我正在复制名为" amps_job_history"的工作表上的第一行数据,它们将这些数据粘贴到名为" lookup"的工作表中,一旦数据粘贴在那里公式进行计算,将数据与另一个工作表中的数据结合起来。然后,我想复制原始数据加上已用公式连接到数据的额外3列,并将其粘贴到名为"结果"的表格中。然后,我希望它回到第一张表" amps_job_hisotry"向下移动到下一行数据并重复该过程,并将数据粘贴到"结果"页面需要在下一行中过去,依此类推,直到它到达最后一条记录。

1 个答案:

答案 0 :(得分:1)

我认为这个循环是你正在寻找的。

Sub Macro2()
    ' Macro2 Macro
    Dim rw As Long

    With Worksheets("amps_job_history")
        For rw = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
            With Intersect(.Range("A:BW"), .Rows(rw))
                Worksheets("Lookup").Range("F3").Resize(.Rows.Count, .Columns.Count) = .Value
            End With

            With Worksheets("Lookup")
                With .Range("F3:V3")
                    Worksheets("Result").Range("A1").Offset(rw - 1, 0).Resize(.Rows.Count, .Columns.Count) = .Value
                End With
            End With
        Next rw
    End With

End Sub

来自amps_job_history和目标结果工作表中源数据的行在每个循环上向下移动一行。 Lookup工作表中的过渡F3:V3范围在整个过程中保持不变。

我使用直接值转移而不是复制,粘贴特殊值,With ... End With statement提供显式父工作表引用,而不使用Range .SelectRange .Activate方法。