|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
菜鸟,代替vlookup函数的代码求助
老师,能提问题吗?我刚学vb,现在论坛找到一组代替vlookup函数的代码,我想改成根据表一第二列的字段查找与表二第二列的任意列或多列的数据(比如我只要第五列和第七列的数据),如能解释下代码的意思更感激不尽。
Option Explicit
Sub hjs()
Dim ds
Dim i&, irow1&, irow2&, icol2%, j%, arr, arr1
Dim arr2(), s
Dim aa As Double
aa = Timer
Application.ScreenUpdating = False
Range("f:iv").Clear
Set ds = CreateObject("scripting.dictionary") '建立一个字典
ds.CompareMode = 1 '按vbTextCompare 1 进行文字比较。
irow1 = [b65536].End(xlUp).Row
arr = Range(Cells(1, 2), Cells(irow1, 2))
With Sheet2
irow2 = .[b65536].End(xlUp).Row
icol2 = .[iv1].End(xlToLeft).Column
arr1 = Range(.Cells(1, 2), .Cells(irow2, icol2))
End With
On Error Resume Next '字典里不能有重复key,故这里对于重复的只取了第一个,忽略执行下一句
For i = 2 To irow2
ds.Add arr1(i, 2), i '字典的key是第一列的数,而item是第二列的数,类似集合collection,记录下i的位置
Next
Err.Clear
On Error GoTo 0
ReDim arr2(1 To irow1, 1 To icol2 - 1)
For i = 2 To irow1
If arr(i, 2) <> "" Then
s = ""
s = ds(arr(i, 2)) '根据第一列的key,找第二列对应的item
If s <> "" Then
For j = 1 To icol2 - 1
arr2(i, j) = arr1(s, j + 1)
Next
End If
End If
Next
[c1].Resize(irow1, icol2 - 1) = arr2
Application.ScreenUpdating = True
MsgBox "总共用时= " & Format(Timer - aa, "0.00") & "秒"
End Sub
Private Sub CommandButton1_Click()
hjs
End Sub |
|