我需要在Excel中创建两个下拉列表。第二个依赖于第一个。所以我有动态数据(我将不断改变车辆和引擎):
我想要的第一个下拉列表是显示车辆。第二个将显示该车辆可用的引擎。
我已经浏览了互联网,建议为每辆车创建一个名称范围,但我希望有一个更好的解决方案,如VlookUp,它会返回一个列表。
我使用以下内容将车辆和引擎放入名称范围:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Columns("B:B")) Is Nothing Then Exit Sub
Dim lRow As Integer
lRow = Range("B" & Rows.Count).End(xlUp).Row
Range("B3:B" & lRow).Name = "VehList"
Range("C3:C" & lRow).Name = "CalList"
答案 0 :(得分:2)
对于简单的情况,您不需要 VBA 或定义的名称。
考虑:
我们在 A1 中有一个下拉列表,可以选择 fruit 或 dog 或 cat 。我们想在 A2 中设置一个下拉列表,以显示正确的子列表。
我们点击 A2 并使用列表选项设置 DV 以及来源中的以下公式: < / p>
=IF(A1="fruit",C1:C4,IF(A1="dog",D1:D4,E1:E4))
这仅适用于主要下拉菜单中的三个选项。如果您的案例在主要下拉菜单中有太多选项,则 IF() 的嵌套可能是一个限制。
答案 1 :(得分:2)
使用参考单元名称,动态参考单元名称和一些数据验证列表,我们可以实现这一目标......
示例表:
Vehicle Engines
V01 V01E01 V01E02 V01E03 V01E04 V01E05 V01E06 V01E07
V02 V02E01 V02E02 V02E03 V02E04 V02E05 V02E06
V03 V03E01 V03E02 V03E03 V03E04
V04 V04E01 V04E02 V04E03 V04E04 V04E05
V05 V05E01 V05E02 V05E03 V05E04 V05E05 V05E06
V06 V06E01 V06E02 V06E03 V06E04 V06E05 V06E06 V06E07
V07 V07E01 V07E02 V07E03 V07E04
V08 V08E01 V08E02
垂直表示的车辆类型及其水平相关引擎
我将具有&#39; Vehicle&#39;写在&#39; VE&#39;中,然后使用以下公式在Cell $ C $ 12中使用数据验证创建第一个下拉列表:
然后我创建了一个名为&#39; VItem&#39;的动态命名范围。具有以下公式:= OFFSET(VE,1,0,COUNTA(OFFSET(VE,1,0,10,1)),1)
= INDEX(OFFSET(VE,1,0,10,1),MATCH($ C $ 12 OFFSET(VE,1,0,10,1),0))
因此,VItem被指定为包含第一个下拉框中指定的车辆的单元格
对于第二个下拉框,我再次使用以下公式进行数据验证:
= OFFSET(VITEM,0,1,1,COUNTA(OFFSET(VITEM,0,1,1,10)))
一些注意事项:列表的大小取决于偏移量内指定范围内存在的非空白单元格数(在此代码中使用了10x1单元格集)。由于它是自动调整大小,车辆列表应垂直连续,水平列出的引擎应该是连续的
车辆名称必须是独一无二的,以便&#39; VItem&#39;已正确分配