在Sheet1中找到一个单元格然后将它所在的整行复制到Sheet2中的第一个空行

时间:2017-05-19 09:28:58

标签: excel vba

我在行开始处收到“下标超出范围”:Sheets(“Sheet1”)。Cells(“A”,i).EntireRow.Copy。如何将行复制并粘贴到Sheet2中的第一个打开的行。

Sub IDwalkups()
Dim endRow As Long
Dim Match1() As Variant
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
ICount = 0
endRow = Sheet1.Range("B999999").End(xlUp).Row

Match1 = Sheet1.Range("E3:E" & endRow)
For i = LBound(Match1) To UBound(Match1)
    If Match1(i, 1) = "W" Then

    Sheets(“Sheet1”).Cells("A", i).EntireRow.Copy Destination:=Sheets   (“Sheet2”).Range(“A” & Rows.Count).End(xlUp).Offset(1)

    Else
   End If
Next i
End Sub

2 个答案:

答案 0 :(得分:1)

我看到2个错误。 首先是复制&粘贴是两个步骤(2个命令)。其次,如果使用Cells,则必须将行和列作为数字参数。您必须将其更改为Range

    If Match1(i, 1) = "W" Then
        Dim sourceRange As Range, destRange As Range
        Set sourceRange = ws.Range("A" & i).EntireRow
        ' or Set sourceRange = ws.Cells(i, 1).EntireRow
        sourceRange.Copy
        Set destRange = Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Offset(1)
        destRange.PasteSpecial
    End If

答案 1 :(得分:1)

您遇到的三个错误是:

  • 使用代替"。例如,“Sheet1”是有效的变量名称,可以在“Sheet1” = 5 * 2等语句中使用。从语法上讲,它与"Sheet1"完全不同,后者是一个字符串文字。
  • 使用Cells("A", i)代替Cells(i, "A") - Cells的第一个参数是行,第二个参数是列。
  • 在使用Rows.Count时不符合您所指的哪个表格(但很有可能这样做无论如何都有效)

所以

Sheets(“Sheet1”).Cells("A", i).EntireRow.Copy Destination:=Sheets   (“Sheet2”).Range(“A” & Rows.Count).End(xlUp).Offset(1)

应该是

Sheets("Sheet1").Cells(i, "A").EntireRow.Copy Destination:=Sheets("Sheet2").Range("A" & Sheets("Sheet2").Rows.Count).End(xlUp).Offset(1)