簡體   English   中英

在一張紙上查找單元格並將行復制到另一張紙上

[英]Find cells on one sheet and copy the rows to another sheet

我有一個名為Backlog的工作表,其中包含數據的行和列。 我需要在第二到最后一列中逐行搜索#N / A的代碼。 找到#N / A時,需要檢查最后一列是否包含C。 如果它包含C,則應將整行附加到名為Logoff的工作表上。 如果最后一列不包含C,則應將整行附加到名為“拒絕”的工作表上。 一旦移至“注銷”或“已拒絕”,則應從原始“待辦事項”表中刪除該行。 我下面的代碼無法正常工作。 在第一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM