将 ARRAYFORMULA 与 QUERY 或 INDEX 一起使用的替代方法

Alternative to using ARRAYFORMULA with QUERY or INDEX

更集中的解释:

这是点差sheet https://docs.google.com/spreadsheets/d/1eMlf9QrI59mdOlUzQSzQherSXxcMbJq9iSyHIxKNaRM/edit?usp=sharing

在 ES 列的 sheet“6-7 硕士 2020-21”中,每一行都需要有一个来自 sheet“SummaryCitizenship”的值。该值位于 sheet“SummaryCitizenship”的 E 列中。该值来自 sheet“SummaryCitizenship”中的行应与以下值匹配该行的 B 列(“SummaryCitizenship”)与 B 列(“6-7 Master 2020-21”)和 C 列 = 1 AND 列 D = 个人责任

我可以将此公式放入 ES 列(“6-7 Master 2020-21”)的每个单元格中

=QUERY(SummaryCitizenship!A1:E12,"select E where B = '"&B2&"' and C = 1 and D = 'Personal Responsibility' ",0)

它有效,但 B 列中的信息(“6-7 硕士 2020-21”)是动态的,一天会更改多次,主要是向 sheet 添加新行。这意味着我需要公式不在 ES 的每个单元格中,而是在单元格 ES1 或 ES2 中,并像 ARRAYFORMULA 那样影响 sheet 的其余部分。

我也试过了

=INDEX(FILTER(SummaryCitizenship!$A:$E,SummaryCitizenship!$B:$B=B1,SummaryCitizenship!$C:$C=1,SummaryCitizenship!$D:$D="Personal Responsibility"),0,5) 

该公式在 ES 的每个单元格中也有效,但不适用于 ARRAYFORMULA

更详细解释的老问题:

我需要根据 3 个条件检查 'SummaryCitizenship!' sheet 中的值,并根据该比较检查 return 一列的值。我可以在每个单元格中以两种方式进行;一个使用过滤器和索引,另一个使用查询。不幸的是,'6-7 Master 2020-21' 中的行数! sheet 不断变化,所以我不能将公式粘贴到每个单元格中。 sheet 有超过 1700 行,并且在学年结束前可能会接近 3000 行。另外,我不知道何时添加新行,所以我不能在需要时弹出并添加公式。我真的需要一些可以从单元格引用 ES2 或 ES1 中使用的东西。

以下是粘贴到每个单元格后有效的公式:

=INDEX(FILTER(SummaryCitizenship!$A:$E,SummaryCitizenship!$B:$B=B1,SummaryCitizenship!$C:$C=1,SummaryCitizenship!$D:$D="Personal Responsibility"),0,5)
=QUERY(SummaryCitizenship!A1:E12,"select E where B = '"&B2&"' and C = 1 and D = 'Personal Responsibility' ",0)

如果我只能让其中之一与 arrayFormula 一起工作,我就会被设置。可悲的是,他们没有。

在伪代码中,我需要的是:如果学生的唯一 ID(B 列“6-7 Master 2020-21”)与 sheet“SummaryCitizenship”B 列上的 UniqueID 匹配,并且 Quarter “SummaryCitizenship”C列为1,PRIDE Standard“SummaryCitizenship”D列为“个人责任”,return总分调整值“SummaryCitizenship”C列为“6-7 Master 2020-21”的ES列”。对“6-7 Master 2020-21!”的所有行执行此操作! ES 列最好在 ES1 或 ES2 中有一个函数条目。

我对 GAS 了解不多,但我可以用它做一些事情。如果您有包含 GAS 的解决方案,我也将不胜感激。

正确,INDEX() 不适用于 ArrayFormula,但我们可以使用 来解决这个问题。

这应该能满足您的需求:

=ArrayFormula(IFNA(VLOOKUP(B2:B,FILTER(SummaryCitizenship!B2:E,SummaryCitizenship!C2:C=1,SummaryCitizenship!D2:D="Personal Responsibility"),4,0)))

(别忘了清除您的专栏!)

标记版本:

=ArrayFormula(
    IFNA(                           // Blank if NA
        VLOOKUP(
            B2:B,                   // Unique ID lookup
            FILTER(                 // Gives us the filter conditions on other table
                SummaryCitizenship!B2:E,    // Key column for VLOOKUP is B
                SummaryCitizenship!C2:C=1,
                SummaryCitizenship!D2:D="Personal Responsibility"
            ),
            4,                      // Index to column 4
            0                       // Exact match
        )
    )
)