Excel公式,将让我显示一个单元格中的数据范围根据另一个单元格中的值

我正在尝试创build一个表单,用户可以从下拉列表中select一个值,然后根据第一个单元格值在下一个单元格中创build另一个下拉列表。 下一个单元格下拉列表需要在单独的工作表上引用一个单元格区域,并只显示第4-30行作为下拉列表。

这可能吗? 我尝试使用间接公式的数据validation,但我不能定义单元格范围,因为代码以数字开头。

任何的意见都将会有帮助?

这是一个使用VBA的非常简单的例子

将此事件macros放在工作表代码区域中:

 Private Sub Worksheet_Change(ByVal Target As Range) Dim A1 As Range, B1 As Range Set A1 = Range("A1") Set B1 = Range("B1") If Intersect(A1, Target) Is Nothing Then Exit Sub Select Case A1.Value Case "animals" Call SetupDV(B1, "dog,cat,bird") Case "days" Call SetupDV(B1, "monday,tuesday,wednesday") Case "months" Call SetupDV(B1, "january,february,march") End Select End Sub 

并把这个macros放在一个标准模块中:

 Sub MAIN() Cells.Validation.Delete Call SetupDV(Range("A1"), "animals,days,months") End Sub Sub SetupDV(MyCells As Range, st As String) With MyCells.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, Formula1:=st .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With End Sub 

然后运行MAIN

每当您从单元格A1中的下拉菜单中进行select时,单元格B1中的下拉菜单将相应地进行调整:

在这里输入图像说明

没有VBA代码,只有使用公式的解决scheme。

假设你的数据如下所示:

动态验证列表

  • 第一列select列表是Catgories,在A2:A4。
  • 第二列select列表将被选为C2:C6 |之一 D2:D6 | E2:E6,通过select一个类别。
  • 在G2:G3中,您可以select一个类别。
  • H2:H3将根据G中select的类别分别显示列表。

H2:H3的validation列表源将使用以下公式进行定义:

 =CHOOSE(MATCH(G2,$C$1:$E$1,0),$C$2:$C$6,$D$2:$D$6,$E$2:$E$6) 

selectH2:H3,进入数据validation,select列表,并把这个公式放在源文件中。 (范围参考将自动更新为H3)。

公式:

MATCH部分为C1:E1中的类别名称返回1,2或3。 CHOOSE根据它们在函数中提供的顺序分别返回范围C,D或E.

备注:

通过简单地在validation列表公式中指定工作表名称Sheet2!C2:C6 ,范围可以引用另一个工作表中的单元格。 在较早版本的Excel中,您需要命名这些外部范围以使其在validation列表中工作。