Excel 2010 VBA 入门 062 跨表数据查询
目录
示例
实现代码
跨表操作单元格
连续查找功能
示例
如图所示,该工作簿中建立“数据表”和“数据查询”表分别用于存储客户信息以及客户信息的查询。现希望在数据查询表的关键字栏中输入某个关键字,并在“数据表”中的各列对该关键字进行查找,然后希望能随着按钮“查找下一个”的单击不断显示下一条满足条件的记录。如何用VBA完成?
客户名称 | 单位地址 | 联系人 | 联系电话 |
石家庄伊克塞尔有限公司 | 石家庄市中山路52号 | 程建华 | XXX-XXXXXXXX |
太原伊克塞尔有限公司 | 太原市中山路76号 | 李国敏 | XXX-XXXXXXXX |
沈阳伊克塞尔有限公司 | 沈阳市中山路27号 | 袁志刚 | XXX-XXXXXXXX |
长春伊克塞尔有限公司 | 长春市中山路56号 | 周汉林 | XXX-XXXXXXXX |
哈尔滨伊克塞尔有限公司 | 哈尔滨市中山路6号 | 骈永富 | XXX-XXXXXXXX |
济南伊克塞尔有限公司 | 济南市中山路56号 | 孙玉梅 | XXX-XXXXXXXX |
南京伊克塞尔有限公司 | 南京市中山路33号 | 陈亚菁 | XXX-XXXXXXXX |
杭州伊克塞尔有限公司 | 杭州市中山路48号 | 康小芸 | XXX-XXXXXXXX |
合肥伊克塞尔有限公司 | 合肥市中山路81号 | 刘晨 | XXX-XXXXXXXX |
福州伊克塞尔有限公司 | 福州市中山路69号 | 齐光 | XXX-XXXXXXXX |
台北伊克塞尔有限公司 | 台北市中山路30号 | 于健惠 | XXX-XXXXXXXX |
南昌伊克塞尔有限公司 | 南昌市中山路83号 | 王文群 | XXX-XXXXXXXX |
郑州伊克塞尔有限公司 | 郑州市中山路80号 | 曾国安 | XXX-XXXXXXXX |
武汉伊克塞尔有限公司 | 武汉市中山路20号 | 刘志峰 | XXX-XXXXXXXX |
长沙伊克塞尔有限公司 | 长沙市中山路78号 | 刘玉录 | XXX-XXXXXXXX |
广州伊克塞尔有限公司 | 广州市中山路30号 | 俞卫广 | XXX-XXXXXXXX |
海口伊克塞尔有限公司 | 海口市中山路98号 | 杨建军 | XXX-XXXXXXXX |
成都伊克塞尔有限公司 | 成都市中山路39号 | 曲波 | XXX-XXXXXXXX |
贵阳伊克塞尔有限公司 | 贵阳市中山路59号 | 林革壮 | XXX-XXXXXXXX |
昆明伊克塞尔有限公司 | 昆明市中山路41号 | 李卫卿 | XXX-XXXXXXXX |
西安伊克塞尔有限公司 | 西安市中山路60号 | 申玲 | XXX-XXXXXXXX |
兰州伊克塞尔有限公司 | 兰州市中山路67号 | 孙正发 | XXX-XXXXXXXX |
西宁伊克塞尔有限公司 | 西宁市中山路22号 | 毛传阳 | XXX-XXXXXXXX |
上海伊克塞尔有限公司 | 上海市中山路100号 | 张元端 | XXX-XXXXXXXX |
实现代码
Option ExplicitDim rngFind As Range '存放查找的起始单元格
Sub 跨表查询()Dim sKey As String '关键字Dim shtQuery As Worksheet '查询表Dim shtData As Worksheet '数据表Dim i As Long '行/列序号'获取工作表变量Set shtQuery = Sheets("数据查询")Set shtData = Sheets("数据表")'查询关键字sKey = shtQuery.Cells(5, "B")With shtData'若查询起始单元格未定义,则将A1单元格作为起始If rngFind Is Nothing ThenSet rngFind = .Range("A1")End If'查找单元格Set rngFind = .Cells.Find(sKey, rngFind, lookat:=xlPart)'若未找到If rngFind Is Nothing ThenFor i = 9 To 12shtQuery.Cells(i, "B").Value = ""Next'找到后Else'填写查询表For i = 9 To 12shtQuery.Cells(i, "B") = .Cells(rngFind.Row, i - 8)Next'将下一次查找的起始单元格设置为当前数据行的最后一个单元格Set rngFind = Intersect(rngFind.EntireRow, .Columns("D:D"))End IfEnd With
End Sub
跨表操作单元格
以工作表对象作为单元格对象的父对象,并在表达式中加以描述,可以得到不同工作表中单元格的值。在当前工作簿中,单元格完整的表述应为
Worksheet.Range
其中,Worksheet为当前工作簿中某个工作表对象,Range为Worksheet工作表中的某个单元格或者单元格区域。对于所有应用于单元格的方法或者属性,当需要跨表执行某个单元格的方法或者获取属性时,则必须以上述形式为单元格指明其所在的工作表。否则,Excel将会视为当前工作表中的单元格。
本例中,将使用Find方法对指定的关键字进行查找。由于当前操作的工作表为“数据查询”表,而所需查找的内容属于“数据表”,因而必须使用单元格的完整形式表示“数据表”中的数据单元格区域:
Worksheets("数据表").Range("A2:D25")
同样,当需要从“数据表”中读取数据时,也必须以单元格的完整表述表示单元格。
连续查找功能
Excel内置的查找功能提供了用户单击按钮时不断查找下一个的作用。在VBA程序中使用Find方法指定After参数,即可从某个单元格之后的范围进行查找。因而必须记录当前找到的单元格对象,一般可以存放于一个全局变量中,或者可以存放于工作表中。
本例是按照每条记录进行查找,即同一条记录中含有相同的关键字的多个字段不应被查找到多次。因而作为记录查找到的单元格,应该将其设置为与查找到的单元格相同行的最后一列单元格。如此,当再次执行Find方法并设置After参数为该单元格时,则可以从下一条记录进行查找。
当查找不到时,则Find方法返回Nothing。此时,应将记录单元格的全局变量设置为第一个单元格。否则,当执行Find方法进行查找时会发生错误。本例的连续查找流程见图4-7。
Excel 2010 VBA 入门 062 跨表数据查询相关推荐
- Excel 2010 VBA 入门 063 跨表数据录入
目录 示例 实现代码 ListObject对象 ListObject对象的表示方法 1.序号表示法 2.名称表示法 ListColumn对象 向ListObject中添加新数据 使用VBA添加List ...
- Excel 2010 VBA 入门 070 工作表事件之双击鼠标BeforeDoubleClick
目录 示例 实现代码 工作表双击事件(BeforeDoubleClick) 示例 如图所示,该表为某公司员工工资表.为方便对比,现希望能够通过双击标题行即可对该列数据进行降序排列.该如何用VBA完成? ...
- Excel 2010 VBA 入门 072 工作表事件之activate
目录 示例 实现代码1 工作表(Worksheet)对象的Select方法 实现代码2 附件:显示所有工作表 目录工作表中加入事件 其它工作表中加入事件 实现代码3 工作簿事件 类模块和Me变量 示例 ...
- Excel 2010 VBA 入门 034 创建图片批注
目录 批注(Comment)对象 批注的添加与删除 FiIIFormat对象 OnError语句 示例: 批注(Comment)对象 Comment对象是单元格的一个属性,表示单元格的批注.Comme ...
- Excel 2010 VBA 入门 082 数据处理之对比两个表的数据
示例: 如图所示,该工作簿中有两个来自不同数据源的材料表,这两个表中的数据可能不同.如何使用VBA比较两张表的编号与数量,并建立一张对照表,分别列出两张表的不同:编号同时存在但数量不同:编号在其中一张 ...
- Excel 2010 VBA 入门 037 获取最后一行数据的行数
目录 示例: 实现代码1 使用Find方法查找最后的单元格 Find方法按行查找和按列查找的区别 实现代码2 获取工作表总行数 实现代码3 单元格对象的End属性 End属性的局限性 其他获取最后数据 ...
- Excel 2010 VBA 入门 087 数据处理之按单列汇总多个工作表
示例 如图所示,该工作簿中包含若干个工作表,工作表中为各个学校书籍销售明细.如 何使用VBA按其工作表中的图书名称汇总各种图书的数量? 示例数据表 序号 图书名称 版 别 年版 定价 适读范围 订 ...
- Excel 2010 VBA 入门 088 数据处理之汇总列数不相等的多个工作表
目录 示例 代码1 合并汇总(Consolidate)方法 Array函数 Evaluate方法构造数组 代码2 示例 如图所示,该工作簿中有若干个工资表,由于每个月发放的工资项目不同,因而造成每个工 ...
- Excel 2010 VBA 入门 093 数据处理之建立数组
目录 示例 代码 数组的基本概念 数组的声明 数组的赋值与数组数据的读取 Ubound和Lbound函数获取数组的上下限 ForEach---Next循环遍历数组的注意事项 计算程序运行的时间 数组处 ...
最新文章
- 协程和任务 异步IO 重点
- mysql删除表中的唯一索引吗_Mysql 使用sql删除同表中重复数据并加唯一索引
- Exchange 2010之接受域
- AI:IPPR的数学表示-CNN基本结构分析( Conv层、Pooling层、FCN层/softmax层)
- WebService中文件传输
- 基于深度强化学习的区域化视觉导航方法​​
- 【BZOJ】1725: [Usaco2006 Nov]Corn Fields牧场的安排
- java中几种常见字符集与乱码介绍
- 为什么有人说手机很少有白色的出现了?
- Scala实现WordCount
- 非因解读|Digital Spatial Profiler 新一代高维度空间组学技术
- python图库图片_python爬取优美图库海量图片,附加代码,一键爬取
- Django 框架(菜鸟)教程
- 联想服务器ThinkServer TS80x板载RAID设置教程
- html中阳历生日转换成农历,公历转农历生日查询器,公历农历换算器?
- html 页面自动弹出,javaScript实现自动弹出页面
- ros发布者publisher编程
- 基于PTB数据集实现RNN-LSTM循环神经网络(智能填词)
- 新唐M261M262M263系列芯片知识总结归纳(1)
- 济南大学计算机水平怎么样,济南大学考研难吗?一般要什么水平才可以进入?...