Excel将整行复制到其他工作表

任何人都可以帮助我把这些东西涂抹! 我想将Sheet1的第7列中的每个值作为参数,并将其复制到Sheet2中,如果Sheet2具有此参数,则使用Sheet1的第1列中的值在Sheet2的第30列中进行search,如果符合条件,然后将sheet2中的整行复制到新的sheet3中

Sub test() ' Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Sheet3" ' FinalRow = Cells(Rows.Count, 1).End(xlUp).Row LastRow_Sheet1 = Worksheets("Sheet1").UsedRange.Rows.Count LastRow_Sheet2 = Worksheets("Sheet2").UsedRange.Rows.Count For x = 2 To LastRow_Sheet1 po_number = Worksheets("Sheet1").Cells(x, 7).Value site_name = Worksheets("Sheet1").Cells(x, 1).Value Worksheets("Sheet2").Activate For y = 2 To LastRow_Sheet2 If po_number <> Worksheets("Sheet1").Cells(y, 1).Value Then If InStr(1, CStr(site_name), Worksheets("Sheet2").Cells(y, 30)) >= 1 Then Range("Cells(y, 1):Cells(y,31)").Copy Sheets("Sheet3").Select NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(NextRow, 1).Select ActiveSheet.Paste End If End If Next Next End Sub 

正如Scott所build议的那样,我改变代码如下,Sub test()

 LastRow_Sheet1 = Worksheets("Sheet1").UsedRange.Rows.Count LastRow_Sheet2 = Worksheets("Sheet2").UsedRange.Rows.Count For x = 2 To 2 po_number = Worksheets("Sheet1").Cells(x, 7).Value site_name = Worksheets("Sheet1").Cells(x, 1).Value For y = 2 To 20000 If po_number <> Worksheets("Sheet2").Cells(y, 1).Value Then With Worksheets("Sheet2") ' I ASSUME THIS IS THE SHEET YOU WANT TO WORK WITH. CHANGE AS NECESSARY If InStr(1, CStr(site_name), .Cells(y, 30)) >= 1 Then Range(Cells(y, 1), Cells(y, 31)).Copy nextRow = Sheets("Sheet3").Cells(Sheets("Sheet3").Rows.Count, 1).End(xlUp).Row + 1 Sheets("Sheet3").Range("A" & nextRow).PasteSpecial 'You may need to change this. I am not sure what range you were wanting to paste to End If End With End If Next Next 

结束小组

但没有复制到Sheet3 lol …而且,我想知道什么Sheets("Sheet3").Range("A" & nextRow).PasteSpecial这一行代表?

非常感谢!

如果我理解正确,我想你想这样做:

 Sub test() LastRow_Sheet1 = Worksheets("Sheet1").UsedRange.Rows.Count LastRow_Sheet2 = Worksheets("Sheet2").UsedRange.Rows.Count For x = 2 To LastRow_Sheet1 po_number = Worksheets("Sheet1").Cells(x, 7).Value site_name = Worksheets("Sheet1").Cells(x, 1).Value For y = 2 To LastRow_Sheet2 If po_number <> Worksheets("Sheet1").Cells(y, 1).Value Then With Worksheets("Sheet2") ' I ASSUME THIS IS THE SHEET YOU WANT TO WORK WITH. CHANGE AS NECESSARY If InStr(1, CStr(site_name), .Cells(y, 30)) >= 1 Then nextRow = Sheets("Sheet3").Cells(Sheets("Sheet3").Rows.Count, 1).End(xlUp).Row + 1 .Range(.Cells(y, 1), .Cells(y, 31)).Copy Sheets("Sheet3").Range("A" & nextRow) End If End With End If Next Next End Sub 

正如在评论中提到的,主要问题是您的行Range("Cells(y, 1):Cells(y,31)").Copy 。 此外,请确保使用要运行的工作表限定所有Range()Cells()Rows.Count等。 另外,我试图删除.Activate / .Active所有实例。 范围可能需要调整,所以让我知道如果这不起作用。