加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VBA 自定义函数 vlookup查找多个sheet表

(2012-04-10 08:53:51)
标签:

杂谈

http://zhidao.baidu.com/question/263644723.html?fr=uc_push&push=core&group=1

vlookup第二个参数包含多个区域怎么写,

例:=VLookup(A1,Sheet2的A:B加上sheet3的A:B加上……,2,0)

浏览次数:13次悬赏分:30 | 离问题结束还有 14 天 22 小时 | 提问者:lianzhiye | 检举
搜索范围是一个工作簿中的8个工作表,用IF语句嵌套太繁琐了。
最好用简单的公式能解决,
实在用VBA的话希望有详细的说明(比如声明变量和公式起始单元格的选择及循环语句方面的说明),本人VBA菜鸟。
---------------------------------------------------------


VBA自定义函数:-------
在sheet表名称上,右键,打开代码窗,
在左边 资源管理器 的空白处,右键,插入,模块,
将下面的代码复制到其中,
返回sheet表,就可以用这个自定义的函数了
-----------------
Public Function iFun(c As Range, n As Integer, ParamArray a() As Variant)
Application.Volatile
On Error GoTo 100
Dim i As Integer, t As Range, tt As Boolean
i = a(LBound(a)).Columns.Count
If i < n Then iFun = "#错误n": Exit Function
For i = LBound(a) To UBound(a)
Set t = a(i).Columns(1).Find(c.Value, , xlValues, xlWhole)
If Not (t Is Nothing) Then tt = True: Exit For
Next
If tt Then iFun = t.Offset(0, n - 1).Value Else iFun = "#N/A"
Exit Function
100:
iFun = "#错误0"
End Function
------------
使用方法:
套用你的公式:
=ifun(A1,2,Sheet2!A:B,Sheet3!A:B,Sheet4!A:B,Sheet5!A:B)
还有sheet就一直往后加,当然,可以只有一个sheet,比如:
=ifun(A1,2,Sheet2!A:B)
不过这时,用vlookup就行
注:
第一个参数,查找的值,同vlookup的第一个参数
第二个参数,返回的列位置,同vlookup的第3个参数,
后面的参数个数不定,都是对查找区域的引用

 

Public Function iFun(c As Range, n As Integer, ParamArray a() As Variant)  '定义一个函数iFun()  '()内是参数列表,见上面的说明  Application.Volatile '将函数定义为易失性函数(当参数的值改动时,自动重算)  On Error GoTo 100 '发生错误时,跳到行 100处,执行最后一句  Dim i As Integer, t As Range, tt As Boolean '定义 个变量  i = a(LBound(a)).Columns.Count '取得第一个工作表区域的列的数量  If i < n Then iFun = "#错误n": Exit Function '如果列数小于参数n,报错"#错误n"并退出  For i = LBound(a) To UBound(a) '循环每个参数a(每个工作表区域)      Set t = a(i).Columns(1).Find(c.Value, , xlValues, xlWhole)      '在每个工作表区域中,查找 第一个参数c的值,赋值给t变量      If Not (t Is Nothing) Then tt = True: Exit For      '如果找到了,就退出  Next    '没有找到就继续找,直到循环完毕  If tt Then iFun = t.Offset(0, n - 1).Value Else iFun = "#N/A"  '循环完毕后,判断是否找到,  '如果找到,就取得同行的后面列的值,  '如果没找到,返回结果"#N/A"  Exit Function '如果程序没有出错,正常退出  100: '行   iFun = "#错误0" '错误时,跳到此处,返回并报错"#错误0"  End Function  ------------  

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有