VBAmacros – 用复制粘贴指定列。

如果在列41(“GRADED”,“UNGRADED”)中find一个string,我有一个部分工作的VBAmacros,它从一张表“AverageEarnings”复制到两个('SicknessRecordGraded','SicknessRecordUngraded')之一。
我希望macros从第3行将列B,C('AverageEarnings')中的值复制到其他表中的列A,B上。
此刻它正在将列B,C,D复制到第3行另一页上的列A,B,C上。
而且,从最初的表格中,我收到了太多的价值,其中有4957。这是我的macros观。

Public Sub CopyRowsSickness() ' This macro will copy rows in AverageEarnings spreadsheet, to Sheet1 if Ungraded (Column AO) or to Sheet2 if Graded. ' Insert message box to warn user. If MsgBox("This could take some time. (5 - 10 mins). Proceed?", vbYesNo) = vbNo Then Exit Sub ' Select initial sheet to copy from Sheets("AverageEarnings").Select ' Find the last row of data - xlUp will check from the bottom of the spreadsheet up. FinalRow = Cells(Rows.Count, 1).End(xlUp).Row ' For loop through each row For x = 1 To FinalRow ThisValue = Cells(x, 41).Value ' The value to check is located in Column AO or 41. If ThisValue = "UNGRADED" Then ' If the value is Ungraded Cells(x, 2).Resize(5000, 3).Copy ' Resize from intial range. Sheets("SicknessRecordUngraded").Select ' Specify first sheet to copy to. NextRow = Cells(3, 3).End(xlUp).Row + 1 ' <-- This line instead of next if you dont want paste over top. 'NextRow = Cells.Row + 1 ' Rows.Count, 1 Cells(NextRow, 1).Select ' Find the next row. ActiveSheet.Paste ' Paste information. Sheets("AverageEarnings").Select 'Reselect sheet to copy from. ElseIf ThisValue = "GRADED" Then Cells(x, 2).Resize(5000, 3).Copy Sheets("SicknessRecordGraded").Select NextRow = Cells(3, 3).End(xlUp).Row + 1 'NextRow = Cells.Row + 1 ' Increment row. ' Rows.Count, 1 Cells(NextRow, 1).Select ActiveSheet.Paste Sheets("AverageEarnings").Select End If Next x End Sub 

我知道问题在于这两行的价值。 我已经将它们修改为各种不同的值,但还没有设法修复它。 它似乎粘贴比“平均收入”中现有的更多的价值。

 Cells(x, 2).Resize(5000, 3).Copy NextRow = Cells(3, 3).End(xlUp).Row + 1 

在复制之前,您要将要复制的范围调整为5000行3列:

 Cells(x, 2).Resize(5000, 3).Copy 

如果您只想从该行的B&C列中复制数据,则只需将其调整为1行2列:

 Cells(x, 2).Resize(1, 2).Copy 

更新了有关数据始终粘贴在第3行的注释。粘贴数据时,该行被标识为:

 NextRow = Cells(3, 3).End(xlUp).Row + 1 

这从单元格C3开始,在当前区域内向上移动(就像按下END + UP),然后向下移动1行。 这意味着如果你在C2中有一个标题行,然后是数据,你最终回到C3单元格来粘贴数据。 假设桌子底下没有东西,我会build议:

NextRow = Cells(1048576,3).End(xlUp).Row + 1

这从底部起作用,以find最后一行数据,然后在下面的单元格。 您可能需要根据您的Excel版本中有多less行可用来调整单元格属性(1048576)的行值。