注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

零售创新,创新那些事儿,SPSS,VBA

零售创新

 
 
 

日志

 
 
关于我

新浪微博,零售创新 研究经理,数据分析师 希望和市场研究和零售业的同事共同进步! 本博客发表的都是免费或试用的资料,如果有版权问题请发邮件wangli12a@163.com联系删除。 spss excel vba blog

网易考拉推荐

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

2012-04-10 08:53:51|  分类: VB和VBA知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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  ------------  
  评论这张
 
阅读(4417)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017