VBA将满足条件的行复制到另一个工作表

我是VBA的新手…如果第一个单元格在这一行中表示X,然后对所有满足这个条件的行都这样做,我想从Sheet2复制一行到Sheet1。 我在If条件中有一个错误…我不知道如何解决这个问题。

Sub LastRowInOneColumn() 'Find the last used row in a Column: column A in this example Worksheets("Sheet2").Activate Dim LastRow As Long With ActiveSheet LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row End With MsgBox (LastRow) For i = 1 To LastRow If Worksheet.Cells(i, 1).Value = "X" Then ActiveSheet.Row.Value.Copy _ Destination:=Hoja1 End If Next i End Sub 

您需要指定workseet。 换行

 If Worksheet.Cells(i, 1).Value = "X" Then 

 If Worksheets("Sheet2").Cells(i, 1).Value = "X" Then 

UPD:

尝试使用下面的代码(但它不是最好的方法。正如@SiddharthRoutbuild议,考虑使用自动filter ):

 Sub LastRowInOneColumn() Dim LastRow As Long Dim i As Long, j As Long 'Find the last used row in a Column: column A in this example With Worksheets("Sheet2") LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row End With MsgBox (LastRow) 'first row number where you need to paste values in Sheet1' With Worksheets("Sheet1") j = .Cells(.Rows.Count, "A").End(xlUp).Row + 1 End With For i = 1 To LastRow With Worksheets("Sheet2") If .Cells(i, 1).Value = "X" Then .Rows(i).Copy Destination:=Worksheets("Sheet1").Range("A" & j) j = j + 1 End If End With Next i End Sub 

将以前的答案格式化为我自己的代码后,如果您试图将通过AutoFilter返回的值粘贴到单独的工作表中,我发现了一种有效的方法来复制所有必要的数据。

 With .Range("A1:A" & LastRow) .Autofilter Field:=1, Criteria1:="=*" & strSearch & "*" .Offset(1,0).SpecialCells(xlCellTypeVisible).Cells.Copy Sheets("Sheet2").activate DestinationRange.PasteSpecial End With 

在此块中, AutoFilter查找包含strSearch值的所有行,并过滤掉所有其他值。 然后复制单元格(如果存在标题,则使用偏移量),打开目标工作表并将这些值粘贴到目标工作表上的指定范围。