|
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$2 A$18))为shi
=OFFSET(db!$B$1,MATCH($A$2,shi,0),1,,COUNTA(OFFSET(db!$B$1 O$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 |
|