设为首页收藏本站|繁體中文

Excel 技巧网

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

查看: 12320|回复: 34

[Excel VBA] vlookup精确查找的增强版

  [复制链接]
发表于 2009-8-17 08:44:03 | 显示全部楼层 |阅读模式
  • 署名作者: 罗刚君
  • 版权声明: 版权归本站与作者共有 除本站官方外非作者本人转载须经许可并注明出处
  • 本文来自: http://andysky.5d6d.com/bbs.php
  • 引用作品:
  • 适用版本: 2010 2007 2003以前版本 
  • 语言环境: 简体中文
  • 学习方法: 掌握Excel技巧的关键是动手操作 | 下载 ≠ 知识


  • 免费注册成为本站会员,享用更多功能,结识更多Office办公高手!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    vlookup在精确查找某个值时,如果有多个符合条件的对象,那么它仅仅返回其中一个 。
    本自定义函数可以轻松突破这个限制,且公式简短。特点如下:
    1.可以通过第四参数方便地提取所有符合条件的对象;
    2.使look可以从左向右或者从右向左边进行查找;
    3.可以返回超出第二参数范围的值。

    代码如下:

    1. Function look(查找值 As String, 区域 As Range, 列 As Integer, 索引号 As Integer) As String
    2.     For i = 1 To 区域.Rows.Count
    3.         If 区域(i, 1) = 查找值 Then j = j + 1
    4.         If j = 索引号 Then look = 区域(1).Offset(i - 1, 列 - 1): Exit Function
    5.     Next i
    6. End Function
    复制代码

    测试功能:
    1.从左向右查找

    vlookup精确查找的增强版

    vlookup精确查找的增强版

    2.超出第二参数也可以查找

    vlookup精确查找的增强版

    vlookup精确查找的增强版

    3.从右向左查找

    vlookup精确查找的增强版

    vlookup精确查找的增强版

    vlookup的精确查找增强版.rar (9.53 KB, 下载次数: 378)
    发表于 2009-8-17 09:24:31 | 显示全部楼层
    代码如此简洁,功能如此强大!多谢分享!
    回复 支持 反对

    使用道具 举报

    发表于 2009-8-17 09:29:58 | 显示全部楼层
    很好用……

    受益匪浅

    多谢!
    回复 支持 反对

    使用道具 举报

    发表于 2009-8-18 10:24:43 | 显示全部楼层
    这样的查找值,最好用Find:

    1. Function look(查找值 As String, 区域 As Range, 列 As Integer, 索引号 As Integer) As String
    2.     Application.Volatile
    3.     On Error Resume Next
    4.     Dim i As Long
    5.     Dim tRan As Range, fRan As Range
    6.     Dim tStr As String
    7.     Set tRan = 区域.Find(查找值)
    8.     If Not tRan Is Nothing Then
    9.         tStr = tRan.Address
    10.         Do
    11.             i = i + 1
    12.             If i = 索引号 Then look = tRan.Offset(0, 列 - 1): Exit Function
    13.             Set tRan = 区域.Find(查找值, tRan)
    14.             '奇怪,为什么用下面这一句不可以?
    15.             'Set tRan = 区域.FindNext(tRan)
    16.         Loop While Not tRan Is Nothing And tRan.Address <> tStr
    17.     End If
    18. End Function
    复制代码

    奇怪的是,为什么不能用FindNext?
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2009-8-18 11:57:26 | 显示全部楼层
    本帖最后由 罗刚君 于 2009-8-18 12:00 编辑

    find的缺点是顺序乱了
    上面的代码中“区域”参数中查找也不对
    要限定在第一列查找才行。
    区域(1).resize(区域.Rows.Count,1)
    回复 支持 反对

    使用道具 举报

    发表于 2009-8-25 08:32:24 | 显示全部楼层
    TKS,真是一个比一个强。
    回复 支持 反对

    使用道具 举报

    发表于 2009-8-25 08:39:04 | 显示全部楼层
    弱弱的问一下啊,请问上述代码是不是VBA代码?
    回复 支持 反对

    使用道具 举报

    发表于 2009-8-31 21:44:06 | 显示全部楼层
    下载现成的了,哈哈,谢谢分享
    回复 支持 反对

    使用道具 举报

    发表于 2009-11-27 19:34:29 | 显示全部楼层
    功能强大!多谢分享!
    回复 支持 反对

    使用道具 举报

    发表于 2009-12-1 09:27:44 | 显示全部楼层
    强悍那!受教了!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    Excel技巧网的会员探讨问题仅代表其个人意见,与网站的立场无关。任何违反国家和地方相关法律法规的言论,本站有义务协助政府相关部门追究发言者的责任!
    本站中非注明转载文章与案例的版权为作者与Excel技巧网共有。若非原文作者,本站之外任何单位或个人未经允许,不得将其用于商业用途。
    若非原文作者,任何形式的非商业性转载必须获得Excel技巧网或作者允许,并注明作者和出处。
    会员发表的帖子如涉及版权纠纷,须自行负责。详情请参考注册时的网站服务条款。
    本站特聘法律顾问:沈学律师

    Archiver|手机版|Excel技巧网 ( 闽ICP备08107682号-2 ) | 闽公网安备 35020302032608号  

    GMT+8, 2018-1-20 11:10

    Powered by Discuz! X3.3

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表