![](/img/trans.png)
[英]Copy entire row of one worksheet to another based on column A of different worksheet
[英]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.