Excel精英培训网

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

[VBA] 038-窗体中罗列冠军名单-疑难千寻千解丛书(VBA)

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

疑难38
在窗体中罗列每月产量冠军名单
好图所示包含了多个月的生产数据。如何实现查找每月的产量冠军并同时显示在窗体列表中呢?
è解决方案
创建一个窗体,在窗体中添加一个列表框。利用公式“=MATCH(MAX(D2:D21), D2:D21,)”获取每个工作表中生产冠军的所有信息,然后配合For...Next循环找出每个月的生产冠军,并导入到数组中。最后将数组一次性赋值给窗体中列表框的List属性。
í操作方法
步骤1
按【Alt+F11】组合键打开VBE窗口。
步骤2
选择菜单“插入”→“用户窗体”,并在属性窗口中将窗体的“Caption”属性修改为“每月产量冠军”;将工具箱中的列表框拖到窗体中,且调整窗体和列表框的大小,使其与一致。
步骤3
双击窗体进入窗体代码窗口,将自动产生的代码清除,然后重新输入以下代码:

  1. [align=left][size=2][font=Times New Roman]Private Sub UserForm_Activate()
  2. '[/font][font=宋体]激活窗体时执行[/font][/size][/align][align=left][size=2][font=Times New Roman]
  3. Dim sht As Worksheet, arr(), i As Integer, MaxRow As Integer, EndRow As Integer[/font][/size][/align][align=left][size=2][font=Times New Roman]
  4. Me.ListBox1.ListStyle = fmListStyleOption
  5. '[/font][font=宋体]指定列表框的显示外观[/font][/size][/align][align=left][size=2][font=Times New Roman]
  6. Me.ListBox1.ColumnCount = 5
  7. '[/font][font=宋体]列表框显示[/font][font=Times New Roman]5[/font][font=宋体]列[/font][/size][/align][align=left][size=2][font=Times New Roman]
  8. Me.ListBox1.ColumnWidths = "40,40,40,40,40"
  9. '[/font][font=宋体]每列的宽度为[/font][font=Times New Roman]40[/font][/size][/align][align=left][size=2][font=Times New Roman]
  10. i = 1[/font][/size][/align][align=left][size=2][font=Times New Roman]
  11. ReDim Preserve arr(1 To 5, 1 To i)
  12. '[/font][font=宋体]重新分配数组的存储空间[/font][/size][/align][align=left][size=2][font=Times New Roman]
  13. arr(1, i) = "[/font][font=宋体]月份[/font][font=Times New Roman]"
  14. '[/font][font=宋体]指定列表框的标题[/font][/size][/align][align=left][size=2][font=Times New Roman]
  15. arr(2, i) = "[/font][font=宋体]姓名[/font][font=Times New Roman]"[/font][/size][/align][align=left][size=2][font=Times New Roman]
  16. arr(3, i) = "[/font][font=宋体]机台[/font][font=Times New Roman]"[/font][/size][/align][align=left][size=2][font=Times New Roman]
  17. arr(4, i) = "[/font][font=宋体]组别[/font][font=Times New Roman]"[/font][/size][/align][align=left][size=2][font=Times New Roman]
  18. arr(5, i) = "[/font][font=宋体]产量[/font][font=Times New Roman]"[/font][/size][/align][align=left][size=2][font=Times New Roman]
  19. For Each sht In Sheets
  20. '[/font][font=宋体]遍历所有工作表[/font][/size][/align][align=left][size=2][font=Times New Roman]
  21. i = i + 1
  22. '[/font][font=宋体]累加变量[/font][/size][/align][align=left][size=2][font=Times New Roman]
  23. EndRow = sht.Cells(Rows.Count, 1).End(xlUp).Row
  24. '[/font][font=宋体]找到工作表的最后非空行行号[/font][/size][/align][align=left][size=2][font=Times New Roman]
  25. '[/font][font=宋体]利用公式计算每个工作表中[/font][font=Times New Roman]D[/font][font=宋体]列最大值所在的行号[/font][/size][/align][align=left][size=2][font=Times New Roman]
  26. MaxRow = Evaluate("=MATCH(MAX(" & sht.Name & "!D2:D" & EndRow & ")," & sht.Name & "!D2:D" & EndRow & ",)") + 1[/font][/size][/align][align=left][size=2][font=Times New Roman]
  27. ReDim Preserve arr(1 To 5, 1 To i)[/font][/size][/align][align=left][size=2][font=Times New Roman]
  28. arr(1, i) = sht.Name
  29. '[/font][font=宋体]数组[/font][font=Times New Roman]1[/font][font=宋体]行[/font][font=Times New Roman]i[/font][font=宋体]列写入工作表名[/font][/size][/align][align=left][size=2][font=Times New Roman]
  30. arr(2, i) = sht.Cells(MaxRow, 1) '2[/font][font=宋体]行[/font][font=Times New Roman]i[/font][font=宋体]列写入姓名[/font][/size][/align][align=left][size=2][font=Times New Roman]
  31. arr(3, i) = sht.Cells(MaxRow, 2) '3[/font][font=宋体]行[/font][font=Times New Roman]i[/font][font=宋体]列写入机台[/font][/size][/align][align=left][size=2][font=Times New Roman]
  32. arr(4, i) = sht.Cells(MaxRow, 3) '4[/font][font=宋体]行[/font][font=Times New Roman]i[/font][font=宋体]列写入组别[/font][/size][/align][align=left][size=2][font=Times New Roman]
  33. arr(5, i) = sht.Cells(MaxRow, 4) '5[/font][font=宋体]行[/font][font=Times New Roman]i[/font][font=宋体]列写入产量[/font][/size][/align][align=left][size=2][font=Times New Roman]
  34. Next[/font][/size][/align][align=left][size=2][font=Times New Roman]
  35. Me.ListBox1.List = WorksheetFunction.Transpose(arr)
  36. '[/font][font=宋体]将数组倒置后写入列表框[/font][/size][/align][align=left][font=Times New Roman][size=2]End Sub[/size][/font][/align]
复制代码
步骤4
选择菜单“插入”→“模块”,并在模块中输入以下代码:

  1. Sub 多表查找()
  2. UserForm1.Show 0
  3. End Sub
复制代码
步骤5
执行过程“多表查找”,将会弹出如所示的窗体,罗列出每月的产量冠军。

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

本帖子中包含更多资源

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

x
发表于 2011-4-9 20:59 | 显示全部楼层
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-1 19:44 , Processed in 0.213909 second(s), 5 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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