Excel 比较两个列表并将值从一个导入到另一个

Excel 比较两个列表并将值从一个导入到另一个,excel,vba,Excel,Vba,我有两张工作表,我需要做的是制作一个vba宏,将第一张工作表中的每个ID与第二张工作表中的ID匹配,并将其值复制到它旁边(第二张工作表中)。值的单元格位置将是固定的,始终在同一列中(例如第2列) 例如,第一张图纸上有一些ID和值如下的数据: Sheet: Data ID Value 356 10000 441 5000 111 4000 Sheet: Database ID Something Value 111 Foo 4000 3

我有两张工作表,我需要做的是制作一个vba宏,将第一张工作表中的每个ID与第二张工作表中的ID匹配,并将其值复制到它旁边(第二张工作表中)。值的单元格位置将是固定的,始终在同一列中(例如第2列)

例如,第一张图纸上有一些ID和值如下的数据:

 Sheet: Data

ID    Value
356   10000
441    5000
111    4000
Sheet: Database
ID     Something   Value
111    Foo         4000
356    Bar         10000
441    Foo         5000
我得到了第二张表,其中只有ID,没有按不同顺序排列的值,例如:

Sheet: Database
ID     Something   Value
111    Foo
356    Bar
441    Foo
当您运行宏时,它应该如下所示:

 Sheet: Data

ID    Value
356   10000
441    5000
111    4000
Sheet: Database
ID     Something   Value
111    Foo         4000
356    Bar         10000
441    Foo         5000
当然,这只是一个例子,实际数据有几百行,是的,我必须使用vba来实现这一点


首先感谢您的帮助:)

这可以做到:

Sub CompareCopy()
Dim FirstSheet As Worksheet
Set FirstSheet = ActiveWorkbook.Worksheets("Sheet1")
Dim SecondSheet As Worksheet
Set SecondSheet = ActiveWorkbook.Worksheets("Sheet2")
Dim lrow As Integer
Dim lrowCompare As Integer
Dim Val As String
Dim ValCompare As String
Dim i As Integer
Dim j As Integer

lrow = FirstSheet.Cells(Rows.Count, 1).End(xlUp).Row 'Find last row in Sheet1
lrowCompare = SecondSheet.Cells(Rows.Count, 1).End(xlUp).Row 'Find last row in Sheet2

For i = 2 To lrow 'Loop through ID column in Sheet 1
    Val = FirstSheet.Cells(i, 1).Value 'Get ID Value in Sheet 1
    For j = 2 To lrowCompare 'Loop through ID column Sheet 2
      ValCompare = SecondSheet.Cells(j, 1).Value 'Get Value ID in Sheet 2
        If Val = ValCompare Then 'Compare the Values
            SecondSheet.Cells(j, 3) = FirstSheet.Cells(i, 2) 'Copy Value from Sheet1 to Sheet2
        End If
    Next j
Next i
End Sub

代码假定所有ID值都是唯一的。

您是否尝试过VLOOUP或索引/匹配?它们是Excel中更基本的检索(也称为查找)公式。浏览一下网站,这个问题一天会弹出多次,尽管我承认你的问题写得比mostI尝试搜索的更清楚。不幸的是,总是有些不同,所以我决定创建一个新问题,我相信很多人在将来会发现它非常有用和清晰,我不明白为什么会有这么多的反对票。虽然我更喜欢像application.match这样更高效的全列查找,但这比充分解决问题更有效。谢谢!对于@pomaaa来说,从.lCol=FirstSheet.Cells(x,Columns.Count).End(xlToLeft).Column开始应该是一个不错的开始