用excel vba解决如下问题

2024-11-27 10:57:39
推荐回答(4个)
回答1:

其实可以用公式来实现,你既然指定要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个需要填数的,如果有变化可以自行修改。

 

如果执行中遇到问题,请拷屏粘贴两个东西:程序错误的错误提示框,按“调试”按钮后保留有黄色条的代码窗口。

回答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

回答3:

一定要用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)
下拉就可以了

回答4:

用vlookup就可以啊,为啥要用vba