Google 表格 arrayformula 用于最近匹配的 2D 查找

Google Sheets arrayformula for 2D lookup with most recent matches

查看此传播sheet(随意复制 'Attempt' sheet 并试一试):https://docs.google.com/spreadsheets/d/1PCaMLIyxC75QSYBg8qXrImAEIKmT3PMqzru_mJeGw8M/edit#gid=0

'Input data' sheet 上是建筑购买、装修和销售的清单,以及发生的年份和之后的楼层面积。

我想要的是 'Desired result' sheet... table 年,每个建筑物都有一列。单元格值是给定年份给定建筑物的建筑面积。我想要单元格 B3 中的一个公式,它将完成 table 并在 'Input data' sheet 更改时自动更新。

我已经设法在单元格 B3 中创建了一个数组公式,它为该行提供了所需的值,可以将其向下复制以为所有行提供所需的值;但是,我想要的是单元格 B3 中的一个公式,它可以完成整个 table.

我已经非常接近于几个嵌套的 MMULT 函数,但不能完全让它工作。我猜可能有一个棘手的 QUERY 函数,但我还没有了解 QUERY 的语法。我也很感兴趣是否有人可以在没有 QUERY 的情况下做到这一点。

使它变得棘手的部分原因是公式需要查找到相关年份的最近匹配项(而不是查找完全匹配项)。

非常感谢您的宝贵时间!

我添加了一个新的 sheet(“Erik Help”),公式如下:

=ArrayFormula(IFERROR(IF(VLOOKUP(B2:F2&A3:A,SORT({'Input data'!A2:A&'Input data'!B2:B,'Input data'!A2:A},1,1),2,TRUE)<>B2:F2,IF(A3:A="",,0),VLOOKUP(B2:F2&A3:A,SORT({'Input data'!A2:A&'Input data'!B2:B,'Input data'!C2:C},1,1),2,TRUE))))

关键概念:

每当你想像这样填充一个网格时,你通常会在 search-key 元素和 search-range 元素中连接元素(就像我在这里对 & 所做的那样) .

当你需要查找“data between data”(如years between years)时,可以使用VLOOKUP,最后一个参数设置为TRUE,即回退到最后一个如果没有完全匹配,则输入。”但是,为了使 TRUE 起作用,所有 search-range 条目都必须严格按升序排列,因此您会看到 SORT 换行。但是,当SORTed,您案例中的某些元素可能会“回退”到不适用于该公司的 year-company 组合;因此第一个 IF 子句确保每个“回退”按公司查找匹配项。如果不匹配,则返回 null 或 0(取决于 A 列是否被占用)。如果是,则返回正确的“回退”结果。