作者:绿色风
分类:
时间:2022-08-18
浏览:143
楼主 罗刚君 |
vlookup在精确查找某个值时,如果有多个符合条件的对象,那么它仅仅返回其中一个 。 本自定义函数可以轻松突破这个限制,且公式简短。特点如下: 1.可以通过第四参数方便地提取所有符合条件的对象; 2.使look可以从左向右或者从右向左边进行查找; 3.可以返回超出第二参数范围的值。 代码如下:
- Function look(查找值 As String, 区域 As Range, 列 As Integer, 索引号 As Integer) As String
- 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 |
2楼 yfan17 |
代码如此简洁,功能如此强大!多谢分享! |
3楼 saomai |
很好用……
受益匪浅
多谢! |
4楼 bengdeng |
这样的查找值,最好用Find:
- Function look(查找值 As String, 区域 As Range, 列 As Integer, 索引号 As Integer) As String
- Application.Volatile
- On Error Resume Next
- Dim i As Long
- Dim tRan As Range, fRan As Range
- Dim tStr As String
- Set tRan = 区域.Find(查找值)
- If Not tRan Is Nothing Then
- tStr = tRan.Address
- Do
- i = i + 1
- If i = 索引号 Then look = tRan.Offset(0, 列 - 1): Exit Function
- Set tRan = 区域.Find(查找值, tRan)
- '奇怪,为什么用下面这一句不可以?
- 'Set tRan = 区域.FindNext(tRan)
- Loop While Not tRan Is Nothing And tRan.Address <> tStr
- End If
- End Function
奇怪的是,为什么不能用FindNext? |
5楼 罗刚君 |
find的缺点是顺序乱了 上面的代码中“区域”参数中查找也不对 要限定在第一列查找才行。 区域(1).resize(区域.Rows.Count,1) |
6楼 yajun_wang888 |
TKS,真是一个比一个强。 |
7楼 yajun_wang888 |
弱弱的问一下啊,请问上述代码是不是VBA代码? |
8楼 syz105729913 |
下载现成的了,哈哈,谢谢分享 |
9楼 ljx63426 |
功能强大!多谢分享! |
10楼 LYG1868lyg |
强悍那!受教了! |
11楼 windowsxpsp |
高手啊!高山仰止…… |
12楼 leejohn |
现成的代码,收藏 |
13楼 lgcmeli |
个人觉得没必要写一段代码解决返回多个值的查找。vlookup本身也可以,就是加个辅助列而已。把东西用简单了,而不是搞复杂了。 |
14楼 lrlxxqxa |
3.从右向左查找没看懂,感觉跟1.从左向右查找一样呀。 |
15楼 eliane_lei |
虽然对VBA晕晕,但是先收藏着。谢谢分享 |
16楼 feishifan |
谢谢楼主的分享 |
17楼 猴子 |
第3、4句代码能解释一下吗?没看明白 谢谢了 |
18楼 zxpzxp |
版主辛苦了。 |
19楼 hustclm |
学习了,思路不错 |
20楼 轻似梦 |
学习学习,感谢分享 |
21楼 罗刚君 |
vlookup在精确查找某个值时,如果有多个符合条件的对象,那么它仅仅返回其中一个 。 本自定义函数可以轻松突破这个限制,且公式简短。特点如下: 1.可以通过第四参数方便地提取所有符合条件的对象; 2.使look可以从左向右或者从右向左边进行查找; 3.可以返回超出第二参数范围的值。 代码如下:
- Function look(查找值 As String, 区域 As Range, 列 As Integer, 索引号 As Integer) As String
- 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 |
22楼 yfan17 |
代码如此简洁,功能如此强大!多谢分享! |
23楼 saomai |
很好用……
受益匪浅
多谢! |
24楼 bengdeng |
这样的查找值,最好用Find:
- Function look(查找值 As String, 区域 As Range, 列 As Integer, 索引号 As Integer) As String
- Application.Volatile
- On Error Resume Next
- Dim i As Long
- Dim tRan As Range, fRan As Range
- Dim tStr As String
- Set tRan = 区域.Find(查找值)
- If Not tRan Is Nothing Then
- tStr = tRan.Address
- Do
- i = i + 1
- If i = 索引号 Then look = tRan.Offset(0, 列 - 1): Exit Function
- Set tRan = 区域.Find(查找值, tRan)
- '奇怪,为什么用下面这一句不可以?
- 'Set tRan = 区域.FindNext(tRan)
- Loop While Not tRan Is Nothing And tRan.Address <> tStr
- End If
- End Function
奇怪的是,为什么不能用FindNext? |
25楼 罗刚君 |
find的缺点是顺序乱了 上面的代码中“区域”参数中查找也不对 要限定在第一列查找才行。 区域(1).resize(区域.Rows.Count,1) |
26楼 yajun_wang888 |
TKS,真是一个比一个强。 |
27楼 yajun_wang888 |
弱弱的问一下啊,请问上述代码是不是VBA代码? |
28楼 syz105729913 |
下载现成的了,哈哈,谢谢分享 |
29楼 ljx63426 |
功能强大!多谢分享! |
30楼 LYG1868lyg |
强悍那!受教了! |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一