VBAmacros将数据复制到新工作表(选项卡)

Sheet1 Sheet2 (output) ABCABC 1 Name1 100 May 1 Name1 100 May 2 Name2 200 June 2 Name2 200 June 3 Name3 Oct 3 Name3 Oct 4 Name4 300 4 Name4 300 5 Name5 

我想要创build一个VBAmacros,它可以读取列B和C中的值。如果任何值超出2,则将该行拖入同一个Excel的新工作表或选项卡中。 如果列B和C是空白的,则跳过该行并移到下一行。 有人可以帮我吗? 添加时请忽略这些点以更正表格的格式

您可以使用活动范围上的.CurrentRegion()来获取对应于整个表的范围,以及.Copy()方法:

 Sub CopyData() Worksheets("Sheet1").Range("A1").Activate ActiveCell.CurrentRegion.AutoFilter Field:=2, Criteria1:="<>" ActiveCell.CurrentRegion.AutoFilter Field:=3, Criteria1:="<>" ActiveCell.CurrentRegion.Copy Worksheets("Sheet2").Range("A1") End Sub 

稍微适当一些,但可读性较差的版本是:

 Sub CopyDataxxx() Dim TargetRange As Range Worksheets("Sheet1").Activate Range("A1").Activate Set TargetRange = ActiveCell.CurrentRegion With TargetRange .AutoFilter Field:=3, Criteria1:="<>" .Copy Worksheets("Sheet2").Range("A1") .AutoFilter 'switches off AutoFilter End With End Sub 

以下是评论中的解释代码

经testing

 Sub checkNcopy() 'Checking the last populated row lastRow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row counter = 2 'Copying the variable Names for i=1 to 3 Worksheets("Sheet2").Cells(1, i) = Worksheets("Sheet1").Cells(1, i) Next For i = 2 To lastRow 'Checking if one of the two columns B and C are populated or not If Not IsEmpty(Worksheets("Sheet1").Cells(i, 2)) Or Not IsEmpty(Worksheets("Sheet1").Cells(i, 3)) Then 'If one of the two variables are populated then copying the data from sheet1 to sheet2 for j=1 to 3 Worksheets("Sheet2").Cells(counter, j) = Worksheets("Sheet1").Cells(i, j) Next counter = counter + 1 End If Next End Sub