在一张纸上查找单元格,并将这些行复制到另一张纸上

我有一个名为Backlog的工作表,其中包含数据的行和列。 我需要的代码将在第二到最后一列逐行search#N / A。 当它find#N / A时,它需要检查最后一列是否包含C。 如果它包含一个C,那么整行应该被追加到名为Logoff的表单中。 如果最后一列不包含C,则整行应被追加到名为Denied的表中。 一旦移动到“注销”或“拒绝”,行应从原始的积压表中删除。 我下面的代码不起作用。 在第一个For语句后,它去End Sub,但没有任何编译错误。

Private Sub CommandButton2_Click() Dim IMBacklogSh As Worksheet Set IMBacklogSh = ThisWorkbook.Worksheets("Backlog") Dim logoffSh As Worksheet Set logoffSh = ThisWorkbook.Worksheets("Claims Logged off") Dim deniedsh As Worksheet Set deniedsh = ThisWorkbook.Worksheets("Claims Denied") IMBacklogSh.Select Dim i As Long For i = 3 To Cells(Rows.Count, 13).End(xlUp).Row If Cells(i, 13).Value = "#N/A" Then If Cells(i, 14).Value = "C" Then IMBacklogSh.Rows(i).EntireRow.Copy Destination:=logoffSh.Range("A" & logoffsh.Cells(Rows.Count, "A").End(xlUp).Row + 1) Else IMBacklogSh.Rows(i).EntireRow.Copy Destination:=deniedsh.Range("A" & deniedsh.Cells(Rows.Count, "A").End(xlUp).Row + 1) End If End If Next i End Sub 

试试看, If Cells(i, 13).Text = "#N/A" Then#N/A是一个错误代码,而不是一个值; 但是,可以检查Range.Text属性,也可以使用IsError函数检查单元格的内容是否有任何错误。

  If Cells(i, 13).Text = "#N/A" Then 'Alternate with IsError 'If IsError(Cells(i, 13)) Then If Cells(i, 14).Value = "C" Then IMBacklogSh.Rows(i).EntireRow.Copy _ Destination:=logoffSh.Range("A" & logoffsh.Cells(Rows.Count, "A").End(xlUp).Row + 1) Else IMBacklogSh.Rows(i).EntireRow.Copy _ Destination:=deniedsh.Range("A" & deniedsh.Cells(Rows.Count, "A").End(xlUp).Row + 1) End If End If 

但是,单个细胞检查是不必要的和耗时的。 AutoFilter方法可用于隔离#N #N/AC#N/A<>C

 Private Sub CommandButton2_Click() Dim IMBacklogSh As Worksheet, logoffSh As Worksheet, deniedsh As Worksheet Set IMBacklogSh = ThisWorkbook.Worksheets("Backlog") Set logoffSh = ThisWorkbook.Worksheets("Claims Logged off") Set deniedsh = ThisWorkbook.Worksheets("Claims Denied") With IMBacklogSh If .AutoFilterMode Then .AutoFilterMode = False With .Cells(1, 1).CurrentRegion .AutoFilter field:=13, Criteria1:="#N/A" .AutoFilter field:=14, Criteria1:="C" With .Resize(.Rows.Count - 1, Columns.Count).Offset(1, 0) If CBool(Application.Subtotal(103, .Cells)) Then .Copy Destination:= _ logoffSh.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) 'optionally delete the originals .EntireRow.Delete End If End With .AutoFilter field:=14, Criteria1:="<>C" With .Resize(.Rows.Count - 1, Columns.Count).Offset(1, 0) If CBool(Application.Subtotal(103, .Cells)) Then .Copy Destination:= _ deniedsh.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) 'optionally delete the originals .EntireRow.Delete End If End With End With If .AutoFilterMode Then .AutoFilterMode = False End With End Sub