之前的用户提出了这个问题:
(Google Sheets) 在满足一定数量的具有所述选项的单元格后,如何删除某些下拉选项?
饼干之神用我一直在玩弄的数组代码回答了。
这是一个玩具示例,您可以根据自己的需要进行调整:
1.在Sheet1的A1:E1中创建选项a,b,c,d,e的列表
2.为 A2:E2 中的每个选项创建限制列表(例如 2,1,3,5,3)
在 G2:G4 中创建人员 Person1、Person2、Person3 的列表
将数据验证应用于 H2:H4:
- 使用条件“下拉(从范围)”
- 设置数据范围为=Sheet1!$A3:$E3(只锁定列,不锁定行)
在A3中输入以下公式:
=lambda(人、选择、列表、限制、 makearray(counta(人),counta(列表),lambda(r,c, if(索引(选择,r)<>索引(列表,,c),if(countif(选择,索引(列表,,c))
我们正在使用 MAKEARRAY 创建一个 2D 数组,其中每行都有选项列表,但是我们要求它从每行中省略列表中的元素(如果尚未选择它们)并且对选择数量有预设限制因为该选项尚未达到。显然,在“真实”示例中,您会将用于验证的数据范围放在单独的工作表中,并且可能也会隐藏和保护该工作表。您还可以使用字符串数组文字而不是单元格范围作为选项列表,以使验证列表公式完全独立。
使用他们的例子,你如何允许每个人在相同的限制参数内做出 3 个选择?
每个学生必须选择 3 个委员会。如果其他学生已经选择了这些委员会并且他们已经达到了最大值,下拉列表中的选择将会消失。
感谢您的宝贵时间。
我重新设计了我对上一个问题的回答的逻辑(并对其进行了一些整理,因为我们现在可以访问当时没有的
let
,而且我已将选择和限制嵌入到式)以满足每人多项选择的额外要求。
因此,给定您的表格,其中包含 G2:G5 中的人员列表和 Choice1/2/3 作为 H1:J1 中的标题:
=arrayformula(let(
people,tocol(G2:G,1),
choices,offset(H2,,,counta(people),3),
list,{"Activity A","Activity B","Activity C","Activity D","Activity E"},
limits,{2,2,2,2,2},
choicesperperson,byrow(choices,lambda(chosen,if(ifna(match(list,chosen,0)),,list))),
underlimit,(counta(people)-countif(choicesperperson,list))<limits,
if(underlimit,choicesperperson,)))
与上次一样,在“真实”示例中,您应该将用于验证的数据范围放在单独的工作表中,并且可能也隐藏和保护该工作表。我已将每个活动的限制设置为 2,但您可以根据需要通过修改 limits 数组中的值来调整此值。
尝试一下,让我知道是否适合您。