其实可以用公式来实现,你既然指定要VBA,估计是有学习兴趣吧,当然VBA在大数据的时候速度是惊人的:
Sub ygb()
Dim db, arr, i, k
Set db = CreateObject("scripting.dictionary")
arr = Sheets(1).UsedRange
For i = 2 To UBound(arr)
k = arr(i, 1) & arr(i, 2)
db.Add k, Array(arr(i, 3), arr(i, 4), arr(i, 5))
Next i
Sheets(2).Select
For i = 1 To Sheets(2).UsedRange.Rows.Count
k = Cells(i, 1) & Cells(i, 2)
If db.Exists(k) Then Cells(i, 3).Resize(1, 3) = db(k)
Next i
End Sub
上面代码在我测试过程中完全正确,如果你那里遇到问题,可能是表格顺序的问题:左边第1个工作表是原始信息,第2个需要填数的,如果有变化可以自行修改。
如果执行中遇到问题,请拷屏粘贴两个东西:程序错误的错误提示框,按“调试”按钮后保留有黄色条的代码窗口。
复制后删除。 注意数据的备份。
Sub AAA()
Dim Ar
Dim Br
Dim D As Object
Ar = Sheets("sheet1").Range("a1").CurrentRegion
Br = Sheets("sheet2").Range("a1").CurrentRegion.Resize(, 5)
Set D = CreateObject("scripting.dictionary")
For i = 1 To UBound(Ar)
D(Ar(i, 1) & Ar(i, 2)) = i
Next
For i = 1 To UBound(Br)
If D.EXISTS(Br(i, 1) & Br(i, 2)) Then
r = D(Br(i, 1) & Br(i, 2))
s = "," & r & ":" & r & s
Br(i, 3) = Ar(r, 3)
Br(i, 4) = Ar(r, 4)
Br(i, 5) = Ar(r, 5)
End If
Next
s = Mid(s, 2)
Sheets("sheet2").Range("a1").Resize(UBound(Br), 5) = Br
Sheets("sheet1").Range(s).Delete
End Sub
一定要用VBA么。。用函数的话会更简单
在sheet2的C1输入:=VLOOKUP($B1,Sheet1!$B$1:$E$14,2,FALSE)
在sheet2的D1输入:=VLOOKUP($B1,Sheet1!$B$1:$E$14,3,FALSE)
在sheet2的E1输入:=VLOOKUP($B1,Sheet1!$B$1:$E$14,4,FALSE)
下拉就可以了
用vlookup就可以啊,为啥要用vba