Excel精英培训网

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

[已解决]查询功能

[复制链接]
发表于 2011-11-12 22:51 | 显示全部楼层 |阅读模式
如何在调出来的窗体中的每一个combobox都自动取对应的列的值并不重复的显示出来,且点击查询按钮后能够实现等级数目的累加效果,搞了一两个小时了还是实现不了,请高手帮忙解决指导一下,谢谢了
最佳答案
2011-11-13 00:11
优化了代码:做成了一个自定义函数,全部通用!
  1. Private Sub UserForm_Initialize()
  2. Dim X As Integer
  3. X = Sheets("产量").Range("A65536").End(xlUp).Row
  4. If X < 3 Then Exit Sub
  5. ComboBox4.List = ADD_COMB_ARR(Range("A3:A" & X))
  6. ComboBox5.List = ADD_COMB_ARR(Range("C3:C" & X))
  7. ComboBox6.List = ADD_COMB_ARR(Range("D3:D" & X))
  8. ComboBox7.List = ADD_COMB_ARR(Range("E3:E" & X))
  9. ComboBox8.List = ADD_COMB_ARR(Range("F3:F" & X))
  10. ComboBox9.List = ADD_COMB_ARR(Range("G3:G" & X))
  11. End Sub
  12. Function ADD_COMB_ARR(Target As Range) '自定义函数 得到不重复内容(数据单元格区域)
  13. Dim Ran As Range
  14. Dim D As New Dictionary
  15. For Each Ran In Target
  16.     D(Ran.Text) = ""
  17. Next
  18. ADD_COMB_ARR = IIf(D.Count > 0, D.Keys, Array(""))
  19. End Function
复制代码

查询.rar

11.41 KB, 下载次数: 7

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-11-12 23:47 | 显示全部楼层
使用字典法!
  1. Dim X As Integer, Y As Integer, i As String
  2. Dim d1 As New Dictionary
  3. Dim d2 As New Dictionary
  4. Dim d3 As New Dictionary
  5. Dim d4 As New Dictionary
  6. Dim d5 As New Dictionary
  7. Dim d6 As New Dictionary
  8. X = Sheets("产量").Range("A65536").End(xlUp).Row
  9. For Y = 3 To X
  10.    d1(Cells(Y, 1).Text) = ""
  11.    d2(Cells(Y, 3).Text) = ""
  12.    d3(Cells(Y, 4).Text) = ""
  13.    d4(Cells(Y, 5).Text) = ""
  14.    d5(Cells(Y, 6).Text) = ""
  15.    d6(Cells(Y, 7).Text) = ""
  16. Next Y
  17. ComboBox4.List = IIf(d1.Count > 0, d1.Keys, Array(""))
  18. ComboBox5.List = IIf(d2.Count > 0, d2.Keys, Array(""))
  19. ComboBox6.List = IIf(d3.Count > 0, d3.Keys, Array(""))
  20. ComboBox7.List = IIf(d4.Count > 0, d4.Keys, Array(""))
  21. ComboBox8.List = IIf(d5.Count > 0, d5.Keys, Array(""))
  22. ComboBox9.List = IIf(d6.Count > 0, d6.Keys, Array(""))
  23. End Sub
复制代码

查询.rar

14.29 KB, 下载次数: 15

回复

使用道具 举报

发表于 2011-11-13 00:11 | 显示全部楼层    本楼为最佳答案   
优化了代码:做成了一个自定义函数,全部通用!
  1. Private Sub UserForm_Initialize()
  2. Dim X As Integer
  3. X = Sheets("产量").Range("A65536").End(xlUp).Row
  4. If X < 3 Then Exit Sub
  5. ComboBox4.List = ADD_COMB_ARR(Range("A3:A" & X))
  6. ComboBox5.List = ADD_COMB_ARR(Range("C3:C" & X))
  7. ComboBox6.List = ADD_COMB_ARR(Range("D3:D" & X))
  8. ComboBox7.List = ADD_COMB_ARR(Range("E3:E" & X))
  9. ComboBox8.List = ADD_COMB_ARR(Range("F3:F" & X))
  10. ComboBox9.List = ADD_COMB_ARR(Range("G3:G" & X))
  11. End Sub
  12. Function ADD_COMB_ARR(Target As Range) '自定义函数 得到不重复内容(数据单元格区域)
  13. Dim Ran As Range
  14. Dim D As New Dictionary
  15. For Each Ran In Target
  16.     D(Ran.Text) = ""
  17. Next
  18. ADD_COMB_ARR = IIf(D.Count > 0, D.Keys, Array(""))
  19. End Function
复制代码

查询.rar

12.08 KB, 下载次数: 44

回复

使用道具 举报

 楼主| 发表于 2011-11-13 09:31 | 显示全部楼层
mxg825 发表于 2011-11-13 00:11
优化了代码:做成了一个自定义函数,全部通用!

请问那个复合框点击以后下拉下来的那个白色框框可不可以设置宽度短一些,要不只有一个4后面还留有那么多空白就显得不美观了,
回复

使用道具 举报

 楼主| 发表于 2011-11-13 09:50 | 显示全部楼层
mxg825 发表于 2011-11-13 00:11
优化了代码:做成了一个自定义函数,全部通用!

你帮我做的那个自定义函数有一个显示未定义,问题在http://www.excelpx.com/forum.php?mod=viewthread&tid=207773&extra=
回复

使用道具 举报

发表于 2011-11-13 10:18 | 显示全部楼层
hytsky 发表于 2011-11-13 09:31
请问那个复合框点击以后下拉下来的那个白色框框可不可以设置宽度短一些,要不只有一个4后面还留有那么多空 ...

文本居中 就可以!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 11:27 , Processed in 0.229201 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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