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

时间:2014-01-12 12:58:33

标签: excel excel-vba copy-paste 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

2 个答案:

答案 0 :(得分:8)

您需要指定工作集。更改行

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

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

<强> UPD:

尝试使用以下代码(但这不是最好的方法。正如@SiddharthRout建议的那样,考虑使用Autofilter):

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

答案 1 :(得分:0)

格式化我自己代码的上一个答案后,如果您尝试将通过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值的所有行,并过滤掉所有其他值。然后复制单元格(如果有标题,则使用偏移量),打开目标工作表并将值粘贴到目标工作表上的指定范围。