Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3341|回复: 2

[VBA] 034-合并单元格查找-疑难千寻千解丛书(VBA)

[复制链接]
发表于 2011-2-20 11:32 | 显示全部楼层 |阅读模式
ET疑难千寻千解丛书之EXCEL2010编程与实践
罗刚君 章兰新 黄朝阳 编著

疑难34
如何在具有合并单元格的区域中多条件逐步查找
如图所示的AB列都有合并单元格,如何在这类表格中查询评分?
è解决方案
创建一个用户窗体,并使用三个组合框分别引用部门、项目组和姓名。利用组合框的Change事件实现修改“部门”、“项目组”和“姓名”三者之一时自动从工作表中查找得分。
í操作方法
步骤1
确定活动工作表为“程序员评分”,按【Alt+F11】组合键打开VBE窗口。
步骤2
选择菜单“插入”→“用户窗体”,并在工具箱中将标签控件、组合框控件和文本框控件拖到窗体中,按所示方式排列及命名;并且将三个组合框和Label5的“名称属性”分别修改为“部门”、“项目组”、“姓名”和“得分”。

步骤3
双击窗体任意位置进入代码窗口,删除自动产生的代码并输入以下新的代码:

  1. Dim rng As Range  '声明一个公共变量
  2. Private Sub UserForm_Activate()  '窗体激活时执行
  3.     For Each rng In [A2].Resize(ActiveSheet.UsedRange.Rows.Count - 1, 1)
  4.         If Len(rng) > 0 Then 部门.AddItem rng.Text  
  5.         '将A列除A1之外的所有非空单元格添加到“部门”组合框
  6.     Next
  7. 部门 = 部门.List(0)  '默认显示列表中第一个值
  8. End Sub
  9. Private Sub 部门_Change()
  10. 项目组.Clear  '当“部门”组合框修改时清除“项目组”的列表
  11.     Dim i As Integer
  12.     '在A列查找“部门”组合框的值,并记录其行号
  13.     i = [a:a].Find(What:=部门.Text, After:=[a1], LookIn:=xlValues, LookAt:=xlPart).Row
  14.     '在A列查找到的单元格所在的合并区域对应的B列单元格中循环,如A2:A5对应B2:B5
  15.     For Each rng In Cells(i, 2).Resize(Cells(i, 1).MergeArea.Rows.Count, 1)
  16.         If Len(rng) > 0 Then Me.项目组.AddItem rng.Text '如果非空则追加到组合框
  17.     Next rng
  18. 项目组=项目组.List(0) '默认显示列表中第一个值
  19. End Sub
  20. Private Sub 项目组_Change()
  21.     If Len(项目组) = 0 Then Exit Sub  '如果组合框“项目组”为空时则退出程序
  22. 姓名.Clear  '清空“姓名”组合框
  23.     Dim i As Integer
  24.      '在B列查找“项目组”组合框的值,并记录其行号
  25.     i = [B:B].Find(What:=项目组.Text, After:=[B1], LookIn:=xlValues, LookAt:=xlPart).Row
  26.     For Each rng In Cells(i, 3).Resize(Cells(i, 2).MergeArea.Rows.Count, 1)
  27.         If Len(rng) > 0 Then 姓名.AddItem rng.Text '如果非空则追加到组合框
  28.     Next rng
  29. 姓名 = 姓名.List(0) '默认显示列表中第一个值
  30. End Sub
  31. Private Sub 姓名_Change()
  32.     If Len(姓名) = 0 Then Exit Sub '如果“姓名”组合框为空时则退出程序
  33.     Dim i As Integer
  34.     '在C列查找“姓名”组合框的值,并记录其行号
  35.     i = [C:c].Find(What:=姓名.Text, After:=[C1], LookIn:=xlValues, LookAt:=xlPart).Row
  36. 得分 = Cells(i, 4)  '将D列i行的值赋予“得分”控件,即最后需要查询的目标值
  37. End Sub
复制代码
步骤4
选择菜单“插入”→“模块”,并在模块中输入以下代码:

  1. Sub 评分查询()
  2.     UserForm1.Show 0
  3. End Sub
复制代码
步骤5
执行过程“评分查询”,将显示所示的窗体,默认显示第一个部门第一个项目第一个人的评分。
修改部门、项目或者姓名时,得分会相应变化,如图所示。

=============================
上摘自《EXCEL2010编程与实践》

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-4-9 21:00 | 显示全部楼层
回复

使用道具 举报

发表于 2011-8-28 12:58 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-1 20:36 , Processed in 0.280263 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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