【问题标题】:Array formula to find the last matching condition查找最后一个匹配条件的数组公式
【发布时间】: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


【解决方案1】:

是可行的,但是使用Named Range来封装Data表的严格Property列是个好主意

=MAX(IF(
        INDEX(
              INDEX(PropertyData, 1 + ROW()-ROW($I$15), 0),
              1,
              N(IF({1}, Criteria[Property Index]))
        ) = Criteria[Value],
        ROW(Criteria[Value])-ROW(Criteria[#Headers]),
        0
))

PropertyData 是属性 1 列中通过命名范围到末尾的第一个单元格。

PropertyData 定义为:

=INDEX(Data, 1, COLUMN(Data[Property 1])-COLUMN(Data) + 1):INDEX(Data, ROWS(Data), COLUMNS(Data))

一个硬编码值是第一个公式所在的 $I$15 单元格。我将表格和公式不同步以表明它处理得很好。

【讨论】:

  • 总感觉命名范围将 excel 的公式系统变成了一种编程语言。几乎就像命名范围的创造性合并类似于 VBA Lite。
  • 同意@DavidS——他们真的可以让事情变得更有效率,就像以变量的形式存储数据......
猜你喜欢
  • 1970-01-01
  • 2015-08-02
  • 2020-02-23
  • 2020-09-27
  • 2015-10-31
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
  • 2022-11-25
相关资源
最近更新 更多