如果单元格=值,将数据复制到工作表中,仅在某些时候有效?

时间:2019-04-19 19:40:38

标签: excel vba

如果列E =“ Y”中的一个单元格,那么我想将该单元格的整个行复制到工作表2中,并对工作簿中除工作表2之外的每个工作表执行此操作。

这是我尝试过的代码。

Sub Macro1()
Dim lastrow As Long
Dim cpyrow As String
Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
    If ws.Name <> "Sheet2" Then
    For Each cell In Range("E:E")
        If cell.Value = "Y" Then
            lastrow = Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Row + 1
            cpyrow = cell.Row & ":" & cell.Row
            ws.Range(cpyrow).Copy Destination:=Sheets("Sheet2").Range("A" & lastrow)
        End If
        Next cell
    End If
    Next ws
End Sub

有时它将复制正确的行,但是有时它将复制其列E中的单元格不等于“ Y”的行,否则将跳过这样做的行。另外,当我在不同的图纸上运行它时,为什么它会给出不同的结果?它不应该以相同的方式运行并遍历每个工作表吗?

2 个答案:

答案 0 :(得分:1)

您错过了循环中的父工作表引用:

  

For Each cell In Range("E:E")

应该是

For Each cell In ws.Range("E:E")

否则,您将测试活动工作表,但在该行上复制正确的工作表。

答案 1 :(得分:1)

替换:

For Each cell In Range("E:E")

具有:

For Each cell In ws.Range("E:E")

(可能还有其他错误)