【发布时间】:2019-01-17 16:16:00
【问题描述】:
我正在尝试用数组公式做一些有点可怕的事情。我快到了,但无法完成最后一块。
假设我有这样的数据行......
Property 1 Property 2 Property 3
Orange Square Hot
Blue Circle Cold
Purple Star Slimy
我有一个标准表,由要检查的列和要匹配的值组成:
Property Index Value
2 Circle
1 Purple
3 Slimy
对于每一行数据,我试图确定该行数据满足的最后一个标准。
即。对于上面的三行数据,我希望得到以下输出:
0 <- a hot orange square isn't slimy or purple or a circle
1 <- a cold blue circle matches (only) the circle criterion
3 <- a slimy purple star is both purple and slimy,
and we count the last match
到目前为止,我已经在一个单元格中尝试了这个数组公式:
{=MAX(
IF(
INDEX(Data[@[Property 1]:[Property 3]], Criteria[Property Index])
= Criteria[Value],
ROW(Criteria[Value]),
0
)
)}
问题在于,当我逐步评估公式时,Criteria[Property Index] 仅评估第一个条目的值 2,而不是评估整个列 {2, 1, 3},所以我只得到重复测试第一个标准。
我希望使用此索引范围进行查找,以分别为每一行生成置换列表 {Square, Orange, Hot}、{Circle, Blue, Cold} 和 {Star, Purple, Slimy},以与值范围进行比较。
当公式跨越多个单元格时,我已经能够让 INDEX 使用一系列索引值并返回每个索引结果的数组,但我试图避免将工作表绑定到固定长度标准表。我希望能够向其中添加更多行并让公式仍然有效。
在这种情况下,有什么方法可以哄 Excel 将索引参数视为一个范围,以获得我想要的数组输出?或者是否有另一种方法可以执行此计算,该计算仍会随着用户添加/删除标准行而扩展?
【问题讨论】:
-
不幸的是,如果您希望 Excel 挑逗一些您认为不可能的事情,
INDIRECT()通常可以使其工作。我得考虑一下这个。 -
@DavidS 我会看到我可以高效地工作。感谢您帮助解谜。 :)
-
可以接受 VBA 吗?在 VBA 中很容易
-
我更喜欢公式解决方案。我可以管理 VBA OK,但我喜欢我的工作表在最终用户打开它们时开箱即用,而不是需要提醒他们启用安全权限以使其正常工作。
-
DMGregory 运气好吗?
标签: excel excel-formula array-formulas