本帖最后由 andysky 于 2014-8-17 14:59 编辑
单击与我联系
代码如下:
Function look(查找值 As String, 区域 As Range, 列 As Integer, 索引号 As Integer) As String
Application.Volatile
For i = 1 To 区域.Rows.Count
If 区域(i, 1) = 查找值 Then j = j + 1
If j = 索引号 Then look = 区域(1).Offset(i - 1, 列 - 1): Exit Function
Next i
End Function
测试功能:
1.从左向右查找
2.超出第二参数也可以查找
3.从右向左查找
测试数据:
vlookup的精确查找增强版.rar
(9.53 KB, 下载次数: 4715)
----8月23日更新----
____________________________________________________________________________________________________________
____________________________________________________________________________________________________________
由于有网友说当查找对象很多时,代码在循环时的执行效率不太好,现修改代码,使用效率大大提高。
同时对第三和第四参数设置默认值,即当你需要对返回第二列的查找目标,且只有一个时符合需求或者只返回第一个目标时,可以简公式,例如公式可以简化为以下长度,表示在A1:B10中第一列查找C1的值,返回第二列中第一个目标值:
=look(c1,a1:b100)
Function look(查找值 As String, 区域 As Range, Optional 列 As Integer = 2, Optional 索引号 As Integer = 1) As String Application.Volatile Dim i As Long, cell As Range, Str As String With 区域(1).Resize(区域.Rows.Count, 1) If .Cells(1) = 查找值 Then Set cell = .Cells(1) Else Set cell = .Find(查找值, LookIn:=xlValues) If Not cell Is Nothing Then Str = cell.Address Do i = i + 1 If i = 索引号 Then look = cell.Offset(0, 列 - 1): Exit Function Set cell = 区域.Find(查找值, cell) Loop While Not cell Is Nothing And cell.Address <> Str End If End With End Function
请在使用的网友更新VBA代码,从而加快查找速度。
《来吧!带你玩转Excel VBA》上市,VBA入门的经典教材,随书光盘附送近500个常见练习题(有答案)
|