簡體   English   中英

如果在 A 列中找不到匹配項,請使用 VBA 將整行從一個 excel 工作表復制到另一個

[英]Use VBA to copy entire row from one excel worksheet to another if match is not found in Column A

我在嘗試使用 VBA 比較不同工作表中的 2 個表,然后復制“主”表中未在“新”表中找到的任何行時遇到了一些問題。 兩個表都格式化為表格。 匹配基於兩個表的 A 列中的“ID”列。 如果 ID 在“主”工作表中,但不在“新”工作表中,則應將整行復制並粘貼到“新”工作表中表格的末尾。

我更新了在另一個論壇中找到的一些代碼,這幾乎可以正常工作。 但是,它似乎只是將 ID 數據粘貼到 A 列中,而不是將所需的整個相應數據行粘貼。

Sub compare()
Dim i As Long
Dim lrs As Long
Dim lrd As Long

With Worksheets("Master")
    lrs = .Cells(.Rows.Count, 1).End(xlUp).Row
    For i = 2 To lrs 'assumes header in row 1
        If Application.IfError(Application.Match(.Cells(i, 1), Worksheets("New").Columns(1), 0), 0) = 0 Then
            lrd = Worksheets("New").Cells(Worksheets("test").Rows.Count, 1).End(xlUp).Row
            Worksheets("New").Cells(lrd + 1, 1).Value = .Cells(i, 1).Value
        End If
    Next i
End With
End Sub

我認為問題與“單元格”參考有關,而不是范圍,但我不知道如何使該行動態化。

方法略有不同,但您需要使用類似Resize()的方法來捕獲整行,而不僅僅是 Col A 中的單元格。

Sub compare()
    Const NUM_COLS As Long = 10 'for example
    Dim wb As Workbook, wsSrc As Worksheet, wsDest As Worksheet
    Dim c As Range, cDest As Range
    
    Set wb = ThisWorkbook 'or ActiveWorkbook for example
    Set wsSrc = wb.Worksheets("Master")
    Set wsDest = wb.Worksheets("New")
    Set cDest = wsDest.Cells(Rows.Count, 1).End(xlUp).Offset(1) 'next empty row

    For Each c In wsSrc.Range("A2:A" & wsSrc.Cells(Rows.Count, 1).End(xlUp).Row).Cells
        If IsError(Application.Match(c.Value, wsDest.Columns(1), 0)) Then
            cDest.Resize(1, NUM_COLS).Value = c.Resize(1, NUM_COLS).Value
            Set cDest = cDest.Offset(1) 'next row
        End If
    Next c
End Sub

暫無
暫無

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

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