ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4082|回复: 7

[推荐] EXCEL vba 实现 从另一个工作表 查询内容 包含多个结果

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-2-21 15:52 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
   我是一卡通运维工程师,周一,领导发疯,突然交代导出门禁每个门下的已授权人员名单! 虽然一卡通程序本身提供了这个功能,到时没有导出数据的功能,也就是只能看,不能导出。上百个门组,超过10万条授权记录,如果用当前程序查询后一个个往EXCEL中记录,得到猴年马月才能完成。
   一番思索,想到了EXCEL编程,把门信息、员工信息、授权信息都从数据库里导出来,然后利用VBA多表联合查询得出结果,岂不痛快!从周一开始,一直搞到周四才出结果,整整4天!

   这是原理:
   这是对各类数据进行保护后交个用户使用的最终结果:
   这是VBA代码截图:
   这是所有代码:
Sub test()
    Dim i As Integer
    '先清空
    For i = 2 To 2000
        If Cells(i, 2) = "" Then Exit For
        Cells(i, 2) = ""
        Cells(i, 3) = ""
        Cells(i, 4) = ""
    Next i
    '获取访问组编码
    AG_Name = Cells(2, 1)
    On Error Resume Next
    AG_NameRow = Sheets("A楼所有访问组").Range("B:B").Find(AG_Name).Row
    AG_Guid = Sheets("A楼所有访问组").Range("A" + CStr(AG_NameRow)).Value
    '填充查询结果
    Dim res As String
    resArr = myLookUp(CStr(AG_Guid))
    For i = 0 To 2000
        On Error Resume Next
        res = resArr(i)
        empNo = Sheets("所有人员权限").Range("a" + res).Value
        If res = "" Then Exit For
        Cells(i + 2, 2) = empNo
        '从员工信息表根据员工编号查找姓名
        empRow = Sheets("员工信息").Range("D:D").Find(empNo).Row
        empName = Sheets("员工信息").Range("G" + CStr(empRow)).Value
        '从部门编码表查找部门名称
        empDptId = Sheets("员工信息").Range("B" + CStr(empRow)).Value
        empDptRow = Sheets("部门编码").Range("A:A").Find(empDptId).Row
        empDpt = Sheets("部门编码").Range("E" + CStr(empDptRow)).Value
        'MsgBox empName
        Cells(i + 2, 3) = empName
        Cells(i + 2, 4) = empDpt
    Next i

    If Cells(2, 2) = "" Then Cells(2, 2) = "该访问组下无人员信息"
    MsgBox "查询已成功完成"

End Sub

' 在sheet3.所有人员权限 中查找指定字符串并返回员工编号,返回结果为数组
Function myLookUp(content As String)
    '将查询到的行编号保存到数组里
    Dim findResRow(2000) As String
    Dim n As Integer
    '5个访问组中查询人员
    For Each Rng In Sheets("所有人员权限").Range("K2:O65536")
        If Rng = content Then
            findResRow(n) = Rng.Row
            n = n + 1
        End If
    Next
    myLookUp = findResRow
End Function

附件可免费、免积分下载源代码哟

大家在使用过程中有问题可随时联系我:我的微信二维码:

添加好友备注:EXCEL编程即可,简单问题我都会答复,但是要是复杂的编程得给我发个小于5元的红包我才能安心研究测试

加我微信

加我微信

EXCEL多表查询VBA

EXCEL多表查询VBA

EXCEL多表查询VBA

EXCEL多表查询VBA

EXCEL多表查询VBA

EXCEL多表查询VBA

多表查询VBA代码.rar

866 Bytes, 下载次数: 154

EXCEL多表查询VBA

TA的精华主题

TA的得分主题

发表于 2019-2-23 08:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
支持,下载学习

TA的精华主题

TA的得分主题

发表于 2019-2-23 09:00 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-2-23 14:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
支持,下载学习

TA的精华主题

TA的得分主题

发表于 2019-2-24 16:01 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-2-24 21:26 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-25 09:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
jjmysjg 发表于 2019-2-23 09:00
没有数据实例呀

sheet1到sheet5表的数据我不敢截图,都是员工身份证号之类的信息,其实大家在使用的时候可以根据情况修改VBA代码,或是把sheet1到sheet5表里随便填充一些内容测试

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-25 09:33 | 显示全部楼层
lsc900707 发表于 2019-2-24 21:26
频繁操作单元格,数据多的话就卡了。

好厉害,这个程序如果要查找的结果太多真的很卡,需要等很久才出结果
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 23:35 , Processed in 0.038925 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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