Vba 如果A列中的单元格与其他工作簿中A列中的单元格相等,则复制该行

Vba 如果A列中的单元格与其他工作簿中A列中的单元格相等,则复制该行,vba,excel,Vba,Excel,我已经在这上面呆了很长时间了,在我的脑海里它似乎相对简单,但我无法让它工作。。所以我需要说,如果workbook1中有一个单元格等于Bob,如果该单元格在另一个工作簿的同一列中,请复制该行 所以,举个例子。。如果在A列工作簿2中找到A列工作簿1中的Bob,则将Bob行中b、c、d、e列中的任何内容复制到工作簿2中 我可以让它很容易地为单一的工作,但它的500+条目 到目前为止,我已经尝试过在这里使用数组(代码当前位于workbook1上的一个按钮中) 在上面的示例中,您正在检查精确单元格中的匹配

我已经在这上面呆了很长时间了,在我的脑海里它似乎相对简单,但我无法让它工作。。所以我需要说,如果workbook1中有一个单元格等于Bob,如果该单元格在另一个工作簿的同一列中,请复制该行

所以,举个例子。。如果在A列工作簿2中找到A列工作簿1中的Bob,则将Bob行中b、c、d、e列中的任何内容复制到工作簿2中

我可以让它很容易地为单一的工作,但它的500+条目

到目前为止,我已经尝试过在这里使用数组(代码当前位于workbook1上的一个按钮中)


在上面的示例中,您正在检查精确单元格中的匹配(例如A5中的值与A5中的值相同),因此我在下面的代码中假设了相同的值。 将源表设置为工作表 将目的表设置为工作表 将列数设置为整数

Set sourceSheet = Worksheets("Sheet3")
Set destinationSheet = Worksheets("Sheet2")

Dim sourceArr() As Variant
Dim destArr() As Variant
sourceArr = sourceSheet.Range("A1:E500")
destArr = destinationSheet.Range("A1:E500")

For i = 1 To 500 'for each I
    If destArr(i, 1) = sourceArr(i, 1) Then
        For columnNumber = 2 To 5
            destArr(i, columnNumber) = sourceArr(i, columnNumber)
        Next
    End If

Next
destinationSheet.Range("A1:A500").Value = destArr
有一篇关于在数组和工作表范围之间传输数据的好文章。使用数组并一次性写入整个数组比单独写入每个单元格的值要快

更新: 如果数据可以位于源电子表格的任意行中,则可以使用“查找”来搜索它。这可能会慢一些:

For i = 1 To 500 'for each I
    Dim found As Range

    Set found = searchRange.Find(destArr(i, 1), LookIn:=xlValues, lookat:=xlWhole)
    If Not found Is Nothing Then
        For columnNumber = 2 To 5
            destArr(i, columnNumber) = found.Offset(0, columnNumber - 1)
        Next
    End If
Next

您可能想考虑在工作表中使用VLoopUp函数,而不是使用VBA .< /P>一种方式:使用<代码>范围来遍历<代码> ALLITS < /代码>的COLL A。查找< <代码> >方法>代码>范围<代码> >代码> OWB。工作表(“SeET2”)。列(1)< /代码>。如果你发现了什么,然后把这些信息放入一个集合(或数组或目标工作表)。是的,对不起,Jane,我应该说清楚,它可能不等于同一个单元格。。所以工作簿1中的bob可能在单元格A5中,然后在第二个工作簿A12中。。。我会仔细阅读这篇文章,看看能不能帮上忙。

For i = 1 To 500 'for each I
    Dim found As Range

    Set found = searchRange.Find(destArr(i, 1), LookIn:=xlValues, lookat:=xlWhole)
    If Not found Is Nothing Then
        For columnNumber = 2 To 5
            destArr(i, columnNumber) = found.Offset(0, columnNumber - 1)
        Next
    End If
Next