如何为数据validation创build一个dynamic列表源?

目前,我正在使用下面的方式来检索数据validation的值,问题是当我将它设置为Source ,我得到The list source must be a delimited list, or a reference to a single row or column. 我如何才能使这个数据validation源可用?

=TRIM(LEFT(SUBSTITUTE(MID(INDEX($B:$B,MATCH($A3,$A:$A,0)),FIND("|",SUBSTITUTE(INDEX($B:$B,MATCH($A3,$A:$A,0)),",","|",1))+1, LEN(INDEX($B:$B,MATCH($A3,$A:$A,0)))),",",REPT(" ",LEN(INDEX($B:$B,MATCH($A3,$A:$A,0))))),LEN(INDEX($B:$B,MATCH($A3,$A:$A,0)))))

我想做的是做一个索引/匹配,并从列中find值,然后检索第n个值。

例如:

  1. 在列A中查找MyValueA
  2. C列中的返回值( MyValueC1, MyValueC2, MyValueC3 )。
  3. 数据validation用作下拉菜单,允许用户select第一个项目或不select任何项目。
  4. M列 – 用户可以使用下拉菜单从步骤2中select第一个项目 – 在这种情况下, MyValueC1
  5. 类似于列N到R

我不能使用的东西:

  • UDF在数据validation中不起作用
  • 定义名称不起作用,因为它将值设置为静态。

在这里输入图像说明

绿色的单元格是应该具有数据有效性下拉列表的单元格,供用户select场景。

  • 第1行用作标题
  • 第2行是场景#1的摘要描述符,它有三个场景(场景#1,场景#2,场景#3)。
  • 第3行和第4行用于用户select想要具有特定颜色的场景,但使用“数据validation”下拉列表的“select列(列M至R)”由“场景”可用的场景确定。
    • select#1链接到场景#1的场景#1的第3和第4行(下拉菜单仅显示场景#1)
    • select#2链接到scheme#1的场景#2的第3和第4行(下拉菜单仅显示场景#2)
    • select#3链接到scheme#1的场景#3的第3和第4行(下拉菜单仅显示场景#3)
    • select#4连接到场景#1的场景#4,对于第3行和第4行(但没有场景#4,所以下拉框应该显示为空白)
    • select#5链接到scheme#1的场景#5,对于行3和4(但是没有场景#5,因此下拉应该显示为空白)
    • select#6链接到场景#1的场景#6的第3和第4行(但没有场景#6,所以下拉框应该显示为空白)

那么对于情景#2(行5和行6)和情景#3(行7和行8)

在单元格中工作的公式,但不在数据有效性中来源:

=LEFT(SUBSTITUTE(INDEX(B:B,MATCH(A3,A:A,0)), ",", "|", 1),FIND("|",SUBSTITUTE(INDEX(B:B,MATCH(A3,A:A,0)), ",", "|", 1),1)-1)

从列B中单元格的场景列表中select第二个场景: =TRIM(LEFT(SUBSTITUTE(MID(INDEX($B:$B,MATCH($A3,$A:$A,0)),FIND("|",SUBSTITUTE(INDEX($B:$B,MATCH($A3,$A:$A,0)),",","|",1))+1, LEN(INDEX($B:$B,MATCH($A3,$A:$A,0)))),",",REPT(" ",LEN(INDEX($B:$B,MATCH($A3,$A:$A,0))))),LEN(INDEX($B:$B,MATCH($A3,$A:$A,0)))))

如果我的理解是正确的,你有:

  1. 场景列表,至less1到3个,以及每个场景的场景列表。
  2. 应用于每个场景的场景颜色列表(根据提供的示例有4个选项)
  3. 对应于每个Scenario \ Scene的选项(从1到6) (即,select#n总是对应于场景#X \ Scene #n),因此对于每个Scenario \ Scene \ Scene Color只有一个可能的select。
  4. 为每个场景\场景分配场景颜色的表(一种场景\场景可能具有多种场景颜色,即场景#1 \场景#1)

该解决scheme包括:

  1. 在工作表级别(范围)添加一个定义的名称(名为DATA ,以包含所有场景作为标题,每个场景下面的所有相应场景 – 每个单元格一个[A1:C4]

在这里输入图像说明 图。1

  1. 添加一个列表来保存所有的场景分配器[E1:E5] – 可选,如果你想要把场景颜色作为下拉菜单

在这里输入图像说明 图2

  1. 添加dynamic定义名称(名为DtaVld ),以允许使用下拉菜单来指定场景颜色:

select单元格I2并使用以下公式添加dynamic定义的名称:

 =INDEX(DATA,1+RIGHT(I$1,1),MATCH($G2,INDEX(DATA,1,0),0)) 

在这里输入图像说明 图3

  1. 添加一个范围(结果表)分配场景颜色[G1:N5]

由于“结果表”基本上将情景颜色分配给场景\场景,所以我冒昧地将场景颜色字段移动到表的开头。

在这里输入图像说明 见图4

在字段中的“结果表”中input以下Formulas \ DataValidations:

scheme:要允许selectscheme,请使用此公式添加“数据validation”以指向“定义的名称” DATA的标题

 =INDEX(DATA,1,0) 

在这里输入图像说明 见图5

场景颜色:为了允许select场景颜色,在$E$2:$E$5的列表中添加一个数据validation指针

select#n's (所有单元格I2:N5 :添加指向dynamic定义名称DtaVld的数据validation