【问题标题】:Create single formula for several different lines (array) (Google Sheets)为几个不同的行(数组)创建单个公式(谷歌表格)
【发布时间】:2021-01-13 14:38:14
【问题描述】:

AD 列中,我有以下值序列:

2
3
4

这些值指的是另一页上的列中的行。

AE 列的每一行中,我使用这个公式:

=IF(AD1="","",IFERROR(SUM(FILTER(INDIRECT("'Registro Geral'!O2:O"&AD1)/100,REGEXMATCH(INDIRECT("'Registro Geral'!H2:H"&AD1),SUBSTITUTE(SUBSTITUTE(JOIN("|",$V$1:$V$4),"||",""),"|||",""))=TRUE))))

=IF(AD2="","",IFERROR(SUM(FILTER(INDIRECT("'Registro Geral'!O2:O"&AD2)/100,REGEXMATCH(INDIRECT("'Registro Geral'!H2:H"&AD2),SUBSTITUTE(SUBSTITUTE(JOIN("|",$V$1:$V$4),"||",""),"|||",""))=TRUE))))

=IF(AD3="","",IFERROR(SUM(FILTER(INDIRECT("'Registro Geral'!O2:O"&AD3)/100,REGEXMATCH(INDIRECT("'Registro Geral'!H2:H"&AD3),SUBSTITUTE(SUBSTITUTE(JOIN("|",$V$1:$V$4),"||",""),"|||",""))=TRUE))))

简而言之,此公式根据同一工作表的另一列中的相应单元格是否出现在一组值中来获取另一工作表中的值的运行总和。

当我尝试添加ARRAYFORMULA 这样我就不必在每一行上都有一个公式,只留下AE1,所有行上返回的值都是完全相同的值。

测试公式失败:

=ARRAYFORMULA(IF(AD1:AD="","",IFERROR(SUM(FILTER(INDIRECT("'Registro Geral'!O2:O"&AD1:AD)/100,REGEXMATCH(INDIRECT("'Registro Geral'!H2:H"&AD1:AD),SUBSTITUTE(SUBSTITUTE(JOIN("|",$V$1:$V$4),"||",""),"|||",""))=TRUE)))))

Spreadhseet 示例的链接:
https://docs.google.com/spreadsheets/d/1qIv6KnLv-EwJQXRrk7ucuqY-XuJhkIHOCtih9FpAg6U/edit?usp=sharing

【问题讨论】:

  • 这看起来像是一个非常经典的 XY 示例......xyproblem.info
  • 您的工作表中没有广告栏

标签: google-sheets google-sheets-formula array-formulas


【解决方案1】:

您正在尝试根据H 列中的相应值是否出现在过滤后的值中,对O 进行运行求和。

我们可以通过使用下三角矩阵和列出的值的矩阵乘法来做到这一点,使用IF 根据特定条件选择将哪些值归零。

=ArrayFormula(MMULT(
    N(SEQUENCE(D2)>=SEQUENCE(1,D2)),
    ARRAY_CONSTRAIN(
        IF(
            ('Registro Geral'!O2:O<>"")*
                IFNA(MATCH('Registro Geral'!H2:H,V:V,0)),
            'Registro Geral'!O2:O
        )/100,
        D2,
        1
    )
))

为什么会这样

下三角矩阵的样子

1 0 0 0 0 ... up to N columns
1 1 0 0 0
1 1 1 0 0
1 1 1 1 0
1 1 1 1 1
... up to N rows

你想求和的列看起来像

Value 1
Value 2
...
Value N

所以当你将两者相乘时,你会得到一个维度为 N x 1 的新矩阵:

Value 1
Value 1 + Value 2
...
Value 1 + ... + Value N

如果我们不想对一个值求和,那么我们可以用一个条件将它清零,这样它就永远不会被添加。

【讨论】:

  • 非常好的答案,也试图解决这个问题,但偶然发现了数组公式不可迭代的所有间接和偏移
  • 我要做的更正是,而不是 -- 将设置 N() 函数,因为 -- 可能不是谷歌表格中最著名的操作数
  • @nabais 谢谢。 INDIRECTs 也让我陷入了循环。那和REGEXMATCH上的过滤器。
  • @BrondbyIF 没问题。我应该提一下,您也不再需要原来的 SEQUENCE 列,因为它已集成到新公式中。
  • @BrondbyIF 我所能做的就是简化你的公式。恐怕我还没有真正理解它想要实现的目标。
猜你喜欢
  • 2020-05-29
  • 2020-09-16
  • 2019-02-17
  • 1970-01-01
  • 1970-01-01
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多