Dra*_*nna 5 excel vba excel-formula
我无法找到正确的公式来验证基于“连接”参考数据和实际数据的数据。
我在参考表中有两个参考数据组:
| 水果ID | 水果名称 | 篮子ID | 篮子类型 | 水果ID | |
|---|---|---|---|---|---|
| 1 | 苹果 | BAS-1 | 10 | 1 | |
| 2 | 香蕉 | BAS-1 | 10 | 2 | |
| 3 | 菠萝 | BAS-1 | 20 | 1 | |
| BAS-2 | 10 | 2 |
参考FRUIT了可用数据。参考BASKET了可用的篮子,但有一条规则规定每个篮子中只允许放置一些水果。上表旨在明确:
然后,我在另一张表中拥有数据,用户应该能够在其中进行交互,并且我希望数据验证通过下拉列表仅显示上下文中允许的值。例如:
| 排 | 篮子ID | 篮子类型 | 水果 |
|---|---|---|---|
| 1 | BAS-1 | 10 | X |
| 2 | BAS-1 | 20 | X |
| 3 | BAS-2 | 10 | X |
我的目标是在列中设置一个下拉FRUIT列表,仅允许 row_1 选择 Banana 和 Apple,row_2 选择 Apple,row_3 选择 Banana。我还没有找到一种方法来加入数据来显示实际的水果名称。到目前为止我得到的最接近的是这个公式:
=OFFSET(FRUIT; MATCH(BASKET_ID; REFS_BASKET_ID ; 0) - 1; 0; COUNTIF(REFS_BASKET_ID; BASKET_ID); 1)
Run Code Online (Sandbox Code Playgroud)
但这个公式还不够,因为:
FRUIT_ID当我需要时它会显示FRUIT_TYPE我怎样才能实现这个目标?模板不是一个强烈的要求。
这可能是一项艰难的任务。也许我不知道更好的选择,但我所做的是我首先在参考选项卡上创建了一个溢出的动态数组。然后我将此数据引用为自定义列表数据验证。它看起来像:
公式为N2:
=IFERROR(DROP(REDUCE(0,I2:I4,LAMBDA(x,y,HSTACK(x,LET(z,TOROW(FILTER(F2:F5,(D2:D5=INDEX(J2:J4,y))*(E2:E5=INDEX(K2:K4,y)))),FILTER(B2:B4,MMULT(N(A2:A4=z),SEQUENCE(COUNT(z),,,0))))))),,1),"")
Run Code Online (Sandbox Code Playgroud)
然后我选择L2:L4并添加了自定义参考:
现在,我们可以选择每个单元格,它将有自己的自定义下拉列表:
我一开始尝试将错误保留在溢出数组中,并尝试TOCOL()在源中使用,但是 Excel 似乎不允许这样做。因此,您将留下一些空字符串值。
希望其他人有一个更简单的解决方案供您使用=)
编辑:
同样的事情,更大的输入列表: