【问题标题】:Copy rows from one worksheet to another based on a unique "ID" column?根据唯一的“ID”列将行从一个工作表复制到另一个工作表?
【发布时间】:2021-08-25 17:02:58
【问题描述】:

我有 2 个 Excel 工作表(工作表 A 和工作表 B)。它们具有相同的列标题。名为“ID”的列之一在两个工作表中具有相同的值。此外,“ID”是一个在工作表中从不重复的唯一编号。

我正在尝试制作一个 VBA 脚本来比较 2 个工作表的 2 个 ID 列。如果两个工作表之间特定行的 ID 相同,它将将该行的其余内容从 B 复制到 A 中存在 ID 的行上。

这是 2 个 excel 内容的示例(抱歉,我无法将图片上传到 stackoverflow):

Worksheet A:

ID      Color   Make      Build
A5      red     toyota    corolla
7       blue    nissan    blah
3       red     blahblah  bloo
6       blue    toyota    corolla
9       red     nissan    blah
54      blue    blahblah  bloo
987     red     nissan    blah
432432  white   car       car

Worksheet B:

ID  Color   Make      Build
3   green   blahblah  bloo
6   blue    toyota    corolla
A5  red     toyota    corolla
7   blue    nissan    SUPERCAR
9   yellow  Tesla     blah
54  blue    blahblah  bloo
987 red     nissan    blah

对于此示例,如果 ID 相同,我尝试将颜色/制作/构建单元格从工作表 B 复制到 A。

例如,工作表 A 的第 3 行将变为: 7蓝色日产SUPERCAR

这是我到目前为止所拥有的(这是一般的想法,但我不熟悉使这项工作的正确语法):

Private Sub CommandButton_Click()

    Dim A As Worksheet, B As Worksheet, ID As Long

    Set A = Sheets("Sheet1")
    Set B = Sheets("Sheet2")

    For i = 2 to 8
     For j = 2 to 8
      If A.Cells(i,1) = B.Cells(j,1)
      Then
      A.Cells(i,2) = B.Cells(j,2)
      A.Cells(i,3) = B.Cells(j,3)
      A.Cells(i,4) = B.Cells(j,4)
      Else
      Continue
     Next j
    Next i

End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    试试这个:

    Private Sub CommandButton_Click()
        
        Dim ws As Worksheet
    Dim ws2 As Worksheet
    
    Set ws = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")
    
        Dim a As String
        
        For i = 2 To ws2.Cells(ws2.Rows.Count, 1).End(xlUp).Row
        a = ws2.Cells(i, 1).Value
    
        For j = 2 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
            If ws.Cells(j, 1).Value = a Then
            
                ws.Cells(j, 2).Value = ws2.Cells(i, 2).Value
                ws.Cells(j, 3).Value = ws2.Cells(i, 3).Value
                ws.Cells(j, 4).Value = ws2.Cells(i, 4).Value
                
            End If
        Next j
    
    Next i
    End Sub
    

    【讨论】:

    • 效果很好!它与我想要它做的相反,但我只需在“ws.Cells(j, 2).Value = ws2.Cells(i, 2).Value”中交换 ws 和 ws2 即可复制工作表 B 单元格到 A. 我遇到的另一个问题是,如果我希望它只抓取所有列而不用这三行对它们进行编号,比如代替 2、3、4,我可以用一个变量(比如说 X)替换它们并制作一个 for绕着那条线循环说“for x = 2 to ws.columns.count”,对吗?再次感谢您的帮助!
    • 别在意我的第二句话,我看到你编辑了你的答案
    • 很高兴我可以为Another question 提供帮助,我建议发布新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    相关资源
    最近更新 更多