目录

示例

实现代码

跨表操作单元格

连续查找功能


示例

如图所示,该工作簿中建立“数据表”和“数据查询”表分别用于存储客户信息以及客户信息的查询。现希望在数据查询表的关键字栏中输入某个关键字,并在“数据表”中的各列对该关键字进行查找,然后希望能随着按钮“查找下一个”的单击不断显示下一条满足条件的记录。如何用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 跨表数据查询相关推荐

  1. Excel 2010 VBA 入门 063 跨表数据录入

    目录 示例 实现代码 ListObject对象 ListObject对象的表示方法 1.序号表示法 2.名称表示法 ListColumn对象 向ListObject中添加新数据 使用VBA添加List ...

  2. Excel 2010 VBA 入门 070 工作表事件之双击鼠标BeforeDoubleClick

    目录 示例 实现代码 工作表双击事件(BeforeDoubleClick) 示例 如图所示,该表为某公司员工工资表.为方便对比,现希望能够通过双击标题行即可对该列数据进行降序排列.该如何用VBA完成? ...

  3. Excel 2010 VBA 入门 072 工作表事件之activate

    目录 示例 实现代码1 工作表(Worksheet)对象的Select方法 实现代码2 附件:显示所有工作表 目录工作表中加入事件 其它工作表中加入事件 实现代码3 工作簿事件 类模块和Me变量 示例 ...

  4. Excel 2010 VBA 入门 034 创建图片批注

    目录 批注(Comment)对象 批注的添加与删除 FiIIFormat对象 OnError语句 示例: 批注(Comment)对象 Comment对象是单元格的一个属性,表示单元格的批注.Comme ...

  5. Excel 2010 VBA 入门 082 数据处理之对比两个表的数据

    示例: 如图所示,该工作簿中有两个来自不同数据源的材料表,这两个表中的数据可能不同.如何使用VBA比较两张表的编号与数量,并建立一张对照表,分别列出两张表的不同:编号同时存在但数量不同:编号在其中一张 ...

  6. Excel 2010 VBA 入门 037 获取最后一行数据的行数

    目录 示例: 实现代码1 使用Find方法查找最后的单元格 Find方法按行查找和按列查找的区别 实现代码2 获取工作表总行数 实现代码3 单元格对象的End属性 End属性的局限性 其他获取最后数据 ...

  7. Excel 2010 VBA 入门 087 数据处理之按单列汇总多个工作表

    示例 如图所示,该工作簿中包含若干个工作表,工作表中为各个学校书籍销售明细.如  何使用VBA按其工作表中的图书名称汇总各种图书的数量? 示例数据表 序号 图书名称 版  别 年版 定价 适读范围 订 ...

  8. Excel 2010 VBA 入门 088 数据处理之汇总列数不相等的多个工作表

    目录 示例 代码1 合并汇总(Consolidate)方法 Array函数 Evaluate方法构造数组 代码2 示例 如图所示,该工作簿中有若干个工资表,由于每个月发放的工资项目不同,因而造成每个工 ...

  9. Excel 2010 VBA 入门 093 数据处理之建立数组

    目录 示例 代码 数组的基本概念 数组的声明 数组的赋值与数组数据的读取 Ubound和Lbound函数获取数组的上下限 ForEach---Next循环遍历数组的注意事项 计算程序运行的时间 数组处 ...

最新文章

  1. 协程和任务 异步IO 重点
  2. mysql删除表中的唯一索引吗_Mysql 使用sql删除同表中重复数据并加唯一索引
  3. Exchange 2010之接受域
  4. AI:IPPR的数学表示-CNN基本结构分析( Conv层、Pooling层、FCN层/softmax层)
  5. WebService中文件传输
  6. 基于深度强化学习的区域化视觉导航方法​​
  7. 【BZOJ】1725: [Usaco2006 Nov]Corn Fields牧场的安排
  8. java中几种常见字符集与乱码介绍
  9. 为什么有人说手机很少有白色的出现了?
  10. Scala实现WordCount
  11. 非因解读|Digital Spatial Profiler 新一代高维度空间组学技术
  12. python图库图片_python爬取优美图库海量图片,附加代码,一键爬取
  13. Django 框架(菜鸟)教程
  14. 联想服务器ThinkServer TS80x板载RAID设置教程
  15. html中阳历生日转换成农历,公历转农历生日查询器,公历农历换算器?
  16. html 页面自动弹出,javaScript实现自动弹出页面
  17. ros发布者publisher编程
  18. 基于PTB数据集实现RNN-LSTM循环神经网络(智能填词)
  19. 新唐M261M262M263系列芯片知识总结归纳(1)
  20. 济南大学计算机水平怎么样,济南大学考研难吗?一般要什么水平才可以进入?...

热门文章

  1. pytorch mnist vgg16 错误记录
  2. libimobiledevice 一些常用指指令
  3. 重启:COSCon'21 讲师征集令 1+N
  4. win2008r2hpc无盘服务器配置,20台无盘网吧服务器配置
  5. vue中使用高德地图自定义行政区划聚合
  6. 计算机鲜艳美丽的花朵教案,幼儿园彩色花教案优秀范文
  7. 机器学习笔记 - Google 神经网络库JAX/FLAX入门
  8. vue项目引入第三方地图插件并且随机显示坐标点(经纬度),点击坐标点弹出窗口,点击详情文字链接到其他模块
  9. 存储过程、Statement详解
  10. Java之BufferedReader