用户
 找回密码
 立即注册
搜索

[分享] excel实现二级关联列表的三种实现方法

[复制链接]

19

主题

169

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2007-3-19 14:32:00
excel实现二级关联列表的三种实现方法
在使用excel中,常常会碰到进行两个关联分组录入的这类问题:如图1、2




下面就这类问题解决总结三种方法:


1、数据有效性验证:
首先在db1数据表中,定义如图3数据区域的名称



然后在“数据有效性”表中,选择A2单位格,打开“数据有效性”对话框,允许选项选择“序列”,来源选项输入“=地市”,按确定,如图4:



选择B2单位格,同样打开“数据有效性”对话框,允许选项选择“序列”,来源选项输入“=indirect(a2)”,按确定,完成。如图5。



2、函数结合数据有效性:

要用到的函数主要有:offset引用函数、match查找函数、以及counta统计函数
首先将db数据表作为数据库,如图6




然后定义=OFFSET(db!$A$2,,,COUNTA(db!$A$2A$18))为shi
=OFFSET(db!$B$1,MATCH($A$2,shi,0),1,,COUNTA(OFFSET(db!$B$1O$1,MATCH($A$2,shi,0),)))为xian
然后切换到“函数实现”数据表,选择A2单元格,打开“数据有效性”对话框,允许选项选择“序列”,来源选项输入“=shi”,按确定,如图7:




选择B2单位格,同样打开“数据有效性”对话框,允许选项选择“序列”,来源选项输入“=xian”按确定,完成。如图8。




3、通过控件结合vba实现:

首先用db3数据表作为此列数据库,如图9。



然后,切换到控件实现数据表,如图10,拖出两个组合框ComboBox1、ComboBox2



接下来切换到vbe,ComboBox1对象的GotFocus过程输入如图11代码



引用:
ComboBox1.Clear
ComboBox2.Clear '清空组合框内容

For i = 2 To Sheet6.[a1].End(xlDown).Row '在第一列从第二行到数据记录最末循环


target = Sheet6.Cells(i, 1) '


flag = 0

For j = 0 To ComboBox1.ListCount - 1

If ComboBox1.List(j) = target Then flag = 1 '如为真跳出循环

Next

If flag = 0 Then ‘为假,将数值加入组合框

ComboBox1.AddItem target

End If

Next
使用道具 举报 回复
发表于 2007-3-19 14:37:00
用第二种方法。其实感觉第三种方法更好些。只是要涉及到宏,自己用还好,给别人用别人就担心了。
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则